<?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>226207</bug_id>
          
          <creation_ts>2021-05-24 19:25:27 -0700</creation_ts>
          <short_desc>Merge all the JIT worklists into a shared worklist</short_desc>
          <delta_ts>2021-05-26 15:56:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226302</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763389</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-24 19:25:27 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763399</commentid>
    <comment_count>1</comment_count>
      <attachid>429617</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-24 20:01:09 -0700</bug_when>
    <thetext>Created attachment 429617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763647</commentid>
    <comment_count>2</comment_count>
      <attachid>429617</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-25 13:14:41 -0700</bug_when>
    <thetext>Comment on attachment 429617
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        on uper tiers when all lower tiers have no pending tasks or have exceeded the maximum

uper =&gt; upper

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:138
&gt; +        : JITPlan(mode, passedCodeBlock)
&gt; +        , m_profiledDFGCodeBlock(profiledDFGCodeBlock)
&gt; +        , m_mustHandleValues(mustHandleValues)
&gt; +        , m_osrEntryBytecodeIndex(osrEntryBytecodeIndex)
&gt; +        , m_compilation(UNLIKELY(m_vm-&gt;m_perBytecodeProfiler) ? adoptRef(new Profiler::Compilation(m_vm-&gt;m_perBytecodeProfiler-&gt;ensureBytecodesFor(m_codeBlock), profilerCompilationKindForMode(mode))) : nullptr)
&gt; +        , m_inlineCallFrames(adoptRef(new InlineCallFrameSet()))
&gt; +        , m_identifiers(m_codeBlock)
&gt; +        , m_weakReferences(m_codeBlock)
&gt; +        , m_transitions(m_codeBlock)

indentation looks off here, but not sure if it&apos;s real or it&apos;s bugzilla

&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:169
&gt; +    JITPlan::cancel();

nit: I find it a bit more elegant to define JITPlan as Base in the class definition in the header, and use Base instead of JITPlan in the various places

&gt; Source/JavaScriptCore/heap/Heap.cpp:-1661
&gt; -            setGCDidJIT();

let&apos;s now remove this function and anything using `gcDidJITBit`, like handleGCDidJIT, etc

&gt; Source/JavaScriptCore/jit/JITBaselinePlan.cpp:33
&gt; +JITBaselinePlan::JITBaselinePlan(CodeBlock* codeBlock, BytecodeIndex loopOSREntryBytecodeIndex)

nit: I think I&apos;d name this BaselineJITPlan

&gt; Source/JavaScriptCore/jit/JITPlan.cpp:148
&gt; +    MonotonicTime before { };

don&apos;t think you need the &quot;{ }&quot;

&gt; Source/JavaScriptCore/jit/JITPlan.h:75
&gt; +    virtual void notifyCompiling();

why virtual? From what I can tell, only one implementation.

&gt; Source/JavaScriptCore/jit/JITWorklist.cpp:79
&gt; +CompilationResult JITWorklist::enqueue(Ref&lt;JITPlan&gt;&amp;&amp; plan)

nit: can this just be a Ref&lt;JITPlan&gt; instead of Ref&lt;JITPlan&gt;&amp;&amp;? That way, this function just takes ownership over the ref, and it can happily still WTFMove it in the CJIT case

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:381
&gt; +    if (codeBlock-&gt;jitType() == JITType::BaselineJIT || worklistState == JITWorklist::Compiled) {

why do we need both these conditions? Won&apos;t Compiled imply we installed the new code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763678</commentid>
    <comment_count>3</comment_count>
      <attachid>429617</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-25 14:03:19 -0700</bug_when>
    <thetext>Comment on attachment 429617
Patch

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

Thanks for the review

&gt;&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:138
&gt;&gt; +        , m_transitions(m_codeBlock)
&gt; 
&gt; indentation looks off here, but not sure if it&apos;s real or it&apos;s bugzilla

I agree, but that&apos;s what check-webkit-style wanted

&gt;&gt; Source/JavaScriptCore/dfg/DFGPlan.cpp:169
&gt;&gt; +    JITPlan::cancel();
&gt; 
&gt; nit: I find it a bit more elegant to define JITPlan as Base in the class definition in the header, and use Base instead of JITPlan in the various places

Will do

&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:-1661
&gt;&gt; -            setGCDidJIT();
&gt; 
&gt; let&apos;s now remove this function and anything using `gcDidJITBit`, like handleGCDidJIT, etc

👍

&gt;&gt; Source/JavaScriptCore/jit/JITBaselinePlan.cpp:33
&gt;&gt; +JITBaselinePlan::JITBaselinePlan(CodeBlock* codeBlock, BytecodeIndex loopOSREntryBytecodeIndex)
&gt; 
&gt; nit: I think I&apos;d name this BaselineJITPlan

That&apos;s a good point, I got hung up on the JIT prefix, but that&apos;s better

&gt;&gt; Source/JavaScriptCore/jit/JITPlan.cpp:148
&gt;&gt; +    MonotonicTime before { };
&gt; 
&gt; don&apos;t think you need the &quot;{ }&quot;

will update, this was just moved from DFGPlan

&gt;&gt; Source/JavaScriptCore/jit/JITPlan.h:75
&gt;&gt; +    virtual void notifyCompiling();
&gt; 
&gt; why virtual? From what I can tell, only one implementation.

will remove

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:381
&gt;&gt; +    if (codeBlock-&gt;jitType() == JITType::BaselineJIT || worklistState == JITWorklist::Compiled) {
&gt; 
&gt; why do we need both these conditions? Won&apos;t Compiled imply we installed the new code?

Yes, but I think I ran into issues with this, I&apos;ll double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763757</commentid>
    <comment_count>4</comment_count>
      <attachid>429711</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-25 16:57:23 -0700</bug_when>
    <thetext>Created attachment 429711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763768</commentid>
    <comment_count>5</comment_count>
      <attachid>429713</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-25 17:16:03 -0700</bug_when>
    <thetext>Created attachment 429713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763788</commentid>
    <comment_count>6</comment_count>
      <attachid>429719</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2021-05-25 17:50:43 -0700</bug_when>
    <thetext>Created attachment 429719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763915</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-26 08:15:29 -0700</bug_when>
    <thetext>Committed r278082 (238161@main): &lt;https://commits.webkit.org/238161@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429719.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763916</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-26 08:16:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78513094&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429617</attachid>
            <date>2021-05-24 20:01:09 -0700</date>
            <delta_ts>2021-05-25 16:57:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226207-20210524200108.patch</filename>
            <type>text/plain</type>
            <size>247744</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NGRiZWU5MGNlMDc0YzFhYTBkY2VlYTc3NDIzNjIzY2NlMTg0YzA2Li4wMzJmMDU5NWE2Y2QyODMw
NjI3NGEyNzUwYWQ5MzM2NGQzZjE4Njc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMDUtMjQgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgTWVyZ2UgYWxsIHRoZSBKSVQgd29ya2xpc3RzIGludG8gYSBzaGFyZWQg
d29ya2xpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjIwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERlbGV0ZSB0aGUgREZHIGFuZCBGVEwgd29ya2xpc3RzIGFuZCByZWZhY3RvciBKSVRXb3JrbGlz
dCB0byBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgIGZvciBhbGwgdGllcnMuIFRoaXMg
cmVkdWNlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbXBpbGVyIHRocmVhZHMgd2hpbGUgYWxsb3dp
bmcgZWFjaAorICAgICAgICB0aWVyIHRvIHVzZSBtb3JlIHRocmVhZHMgd2hlbmV2ZXIgbmVjZXNz
YXJ5LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGZvciB0aGUKKyAgICAgICAgd29ya2xp
c3QgdG8gaGF2ZSAzIHRocmVhZHMsIGJhc2VsaW5lIGNhbiB1c2UgdXAgdG8gYWxsIDMgdGhyZWFk
cyBhbmQgREZHIGFuZCBGVEwgZm9sbG93CisgICAgICAgIHRoZSBwcmV2aW91cyBsaW1pdHMgc2V0
IHRocm91Z2ggSlNDOjpPcHRpb25zLiBSaWdodCBub3csIHRoZSB3b3JrbGlzdCB3aWxsIG9ubHkg
ZG8gd29yaworICAgICAgICBvbiB1cGVyIHRpZXJzIHdoZW4gYWxsIGxvd2VyIHRpZXJzIGhhdmUg
bm8gcGVuZGluZyB0YXNrcyBvciBoYXZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtCisgICAgICAgIG51
bWJlciBvZiBjb25jdXJyZW50IGNvbXBpbGF0aW9ucy4gaS5lLiBieSBkZWZhdWx0IHdlIG9ubHkg
REZHIGNvbXBpbGUgd2hlbiB0aGVyZSBhcmUKKyAgICAgICAgbm8gYmFzZWxpbmUgdGFza3MgaW4g
dGhlIHF1ZXVlIGFuZCB3ZSBvbmx5IEZUTCBjb21waWxlIHdoZW4gd2UgZWl0aGVyIGhhdmUgbm8g
REZHIHRhc2tzCisgICAgICAgIGluIHRoZSBxdWV1ZSBPUiB0aGVyZSBhcmUgYWxyZWFkeSAyIERG
RyBjb21waWxhdGlvbnMgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbToKKyAgICAgICAgKCtbSlNWaXJ0dWFsTWFjaGluZSBzZXROdW1iZXJPZkRGR0NvbXBp
bGVyVGhyZWFkczpdKToKKyAgICAgICAgKCtbSlNWaXJ0dWFsTWFjaGluZSBzZXROdW1iZXJPZkZU
TENvbXBpbGVyVGhyZWFkczpdKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKHJ1bkpJVFRocmVhZExpbWl0VGVzdHMpOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Nv
bW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OmxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6c2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OnNo
b3VsZER1bXBEaXNhc3NlbWJseSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUp
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHR3JhcGhTYWZlcG9pbnQuaDoKKyAgICAgICAgKiBkZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjp0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjp0aWVyVXBDb21tb24pOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpj
b2RlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemVJbkdDKToK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJl
YWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpmaW5hbGl6ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuSW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9E
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9G
VExDb21waWxlLmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmJ1aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgICogZnRsL0ZU
TFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAq
IGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoSlNDOjpGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQpOgorICAgICAgICAoSlNDOjpGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSk6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29tcGxldGVBbGxKSVRQ
bGFucyk6CisgICAgICAgIChKU0M6OkhlYXA6Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdD
b2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xp
c3RFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RvcFRoZVBlcmlwaGVyeSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnN1c3BlbmRDb21waWxlclRocmVhZHMpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpyZXN1bWVDb21waWxlclRocmVhZHMpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRDb3Jl
Q29uc3RyYWludHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvUm9v
dE1hcmtSZWFzb24uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b2RlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVRpbWVTdGF0cyk6Cisg
ICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRCYXNlbGluZVBsYW4uY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcC4KKyAgICAg
ICAgKEpTQzo6SklUQmFzZWxpbmVQbGFuOjpKSVRCYXNlbGluZVBsYW4pOgorICAgICAgICAoSlND
OjpKSVRCYXNlbGluZVBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpK
SVRCYXNlbGluZVBsYW46OmNvZGVTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQmFzZWxp
bmVQbGFuOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L0pJVEJhc2VsaW5lUGxhbi5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oLgorICAgICAg
ICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmNwcC4KKyAgICAgICAgKEpTQzo6SklUQ29t
cGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktl
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlv
bktleS5oLgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29tcGlsYXRpb25L
ZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3IhIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om1vZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SklUQ29tcGlsYXRpb25LZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRp
b25LZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uTW9kZS5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9k
ZS5jcHAuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbk1vZGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tcGlsYXRpb25Nb2RlLmguCisgICAgICAgIChKU0M6OmlzRlRMKToKKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJB
VElPTik6CisgICAgICAgICogaml0L0pJVFBsYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SklUUGxhbjo6SklUUGxhbik6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmNhbmNlbCk6CisgICAg
ICAgIChKU0M6OkpJVFBsYW46Om5vdGlmeUNvbXBpbGluZyk6CisgICAgICAgIChKU0M6OkpJVFBs
YW46Om5vdGlmeVJlYWR5KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6dGllciBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppc0tub3duVG9CZUxp
dmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkpJVFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9y
R0MpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKSVRQbGFuOjpyZXBvcnRDb21waWxlVGltZXMgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKSVRQbGFuOjpjb21waWxlSW5UaHJlYWQpOgorICAgICAgICAqIGppdC9KSVRQbGFu
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRQbGFuOjp+SklUUGxhbik6CisgICAgICAgIChK
U0M6OkpJVFBsYW46OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6Y29kZUJsb2Nr
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6dGhyZWFkIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SklUUGxhbjo6bW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnN0YWdl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6aXNGVEwgY29uc3QpOgorICAgICAgICAo
SlNDOjpKSVRQbGFuOjpmaW5hbGl6ZUluR0MpOgorICAgICAgICAqIGppdC9KSVRQbGFuU3RhZ2Uu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5j
cHAuCisgICAgICAgICogaml0L0pJVFNhZmVwb2ludC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAuCisgICAgICAgIChKU0M6OlNhZmVw
b2ludDo6U2FmZXBvaW50KToKKyAgICAgICAgKEpTQzo6U2FmZXBvaW50Ojp+U2FmZXBvaW50KToK
KyAgICAgICAgKEpTQzo6U2FmZXBvaW50OjpiZWdpbik6CisgICAgICAgIChKU0M6OlNhZmVwb2lu
dDo6Y2FuY2VsKToKKyAgICAgICAgKiBqaXQvSklUU2FmZXBvaW50Lmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oLgorICAgICAgICAqIGppdC9K
SVRTY2FubmFibGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
Y2FubmFibGUuaC4KKyAgICAgICAgKiBqaXQvSklUV29ya2xpc3QuY3BwOgorICAgICAgICAoSlND
OjpKSVRXb3JrbGlzdDo6SklUV29ya2xpc3QpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6
fkpJVFdvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmV4aXN0aW5nR2xvYmFs
V29ya2xpc3RPck51bGwpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFs
V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAg
IChKU0M6OkpJVFdvcmtsaXN0OjpxdWV1ZUxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJ
VFdvcmtsaXN0OjpzdXNwZW5kQWxsVGhyZWFkcyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0
OjpyZXN1bWVBbGxUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBpbGF0
aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBs
YW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNG
b3JWTUFyZVJlYWR5KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpjYW5jZWxBbGxQbGFuc0ZvclZN
KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6CisgICAgICAg
IChKU0M6OkpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGls
YXRpb25zKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnNldE1heGltdW1OdW1iZXJPZkNv
bmN1cnJlbnRGVExDb21waWxhdGlvbnMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6dmlz
aXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpkdW1wIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0pOgor
ICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6
c3RhdGljX2Nhc3Q8c2l6ZV90Pik6CisgICAgICAgICogaml0L0pJVFdvcmtsaXN0SW5saW5lcy5o
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaC4K
KyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAg
ICAgICAqIGppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpK
SVRXb3JrbGlzdFRocmVhZDo6SklUV29ya2xpc3RUaHJlYWQpOgorICAgICAgICAoSlNDOjpKSVRX
b3JrbGlzdFRocmVhZDo6bmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0VGhy
ZWFkOjpwb2xsKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3RUaHJlYWQ6OndvcmspOgorICAg
ICAgICAoSlNDOjpKSVRXb3JrbGlzdFRocmVhZDo6dGhyZWFkRGlkU3RhcnQpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdFRocmVhZDo6dGhyZWFkSXNTdG9wcGluZyk6CisgICAgICAgICogaml0
L0pJVFdvcmtsaXN0VGhyZWFkLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RocmVhZERhdGEuaC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgor
ICAgICAgICAoSlNDOjpWTTo6flZNKToKKwogMjAyMS0wNS0yNCAgUm9iaW4gTW9yaXNzZXQgIDxy
bW9yaXNzZXRAYXBwbGUuY29tPgogCiAgICAgICAgIFdoZW4gcnVubmluZyB3aXRoIC0tcmVwb3J0
VG90YWxQaGFzZVRpbWVzPTEsIHdlIHNob3VsZCBhbHNvIGxvZyB0aGUgbWF4IHRpbWUgaW4gYSBw
aGFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCmlu
ZGV4IDBlMjQ4OWMyMzcxM2FmMTNkMzFhMzY0ZDgwYjAwNWQ1YzVlNjZiMWYuLmFkNmU1MDBmZjFi
ZWNkNjEwYzQwMzA4ODBmMWNjYzU1NWZlYjdhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCi0jaW1wb3J0ICJERkdXb3JrbGlz
dC5oIgorI2ltcG9ydCAiSklUV29ya2xpc3QuaCIKICNpbXBvcnQgIkpTTWFuYWdlZFZhbHVlSW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2ltcG9ydCAi
SlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCIKQEAgLTI3NSwxMSArMjc1LDcgQEAgSlNDb250ZXh0
R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqdmly
dHVhbE1hY2hpbmUpCiArIChOU1VJbnRlZ2VyKXNldE51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRz
OihOU1VJbnRlZ2VyKW51bWJlck9mVGhyZWFkcwogewogI2lmIEVOQUJMRShERkdfSklUKQotICAg
IEpTQzo6REZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBKU0M6OkRGRzo6ZXhpc3RpbmdHbG9iYWxE
RkdXb3JrbGlzdE9yTnVsbCgpOwotICAgIGlmICh3b3JrbGlzdCkKLSAgICAgICAgcmV0dXJuIHdv
cmtsaXN0LT5zZXROdW1iZXJPZlRocmVhZHMobnVtYmVyT2ZUaHJlYWRzLCBKU0M6Ok9wdGlvbnM6
OnByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKTsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybiBKU0M6OkRGRzo6c2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMobnVtYmVyT2ZU
aHJlYWRzKTsKKyAgICByZXR1cm4gSlNDOjpKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5zZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGlsYXRpb25zKG51bWJlck9m
VGhyZWFkcyk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpAQCAtMjg4LDExICsyODQsNyBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0
dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSkKICsgKE5TVUludGVn
ZXIpc2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHM6KE5TVUludGVnZXIpbnVtYmVyT2ZUaHJl
YWRzCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNDOjpERkc6OldvcmtsaXN0KiB3b3Jr
bGlzdCA9IEpTQzo6REZHOjpleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCk7Ci0gICAg
aWYgKHdvcmtsaXN0KQotICAgICAgICByZXR1cm4gd29ya2xpc3QtPnNldE51bWJlck9mVGhyZWFk
cyhudW1iZXJPZlRocmVhZHMsIEpTQzo6T3B0aW9uczo6cHJpb3JpdHlEZWx0YU9mRlRMQ29tcGls
ZXJUaHJlYWRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEpTQzo6REZHOjpzZXROdW1i
ZXJPZkZUTENvbXBpbGVyVGhyZWFkcyhudW1iZXJPZlRocmVhZHMpOworICAgIHJldHVybiBKU0M6
OkpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnNldE1heGltdW1OdW1iZXJPZkNv
bmN1cnJlbnRGVExDb21waWxhdGlvbnMobnVtYmVyT2ZUaHJlYWRzKTsKICNlbHNlCiAgICAgcmV0
dXJuIDA7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggZmY0N2Q2MTQyMjhhY2EwOTdhNWI0NWI1NzlhZmVj
NTI5M2IyNzJhMS4uMTdjMWU4MGY0OWI4ZTc0NTUxYTI4MTllNmExODg3ODMwOWExNDI1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAKICNpbXBv
cnQgIkN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmgiCi0jaW1wb3J0ICJERkdXb3Jr
bGlzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3QuaCIKICNpbXBv
cnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTU0OSwxNCArNTQ4LDcgQEAgc3RhdGljIHZvaWQg
cnVuSklUVGhyZWFkTGltaXRUZXN0cygpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiTnVtYmVyIG9m
IEZUTCB0aHJlYWRzIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZCIsIHVwZGF0ZWROdW1iZXJPZlRo
cmVhZHMgPT0gdGFyZ2V0TnVtYmVyT2ZUaHJlYWRzKTsKICAgICB9OwogCi0gICAgY2hlY2tSZXN1
bHQoQCJydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkgbXVzdCBydW4gYXQgdGhlIHZlcnkgYmVnaW5u
aW5nIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIGdsb2JhbCBKSVQgd29ya2xpc3Qgd2FzIG5v
dCBpbml0aWFsaXplZCB5ZXQiLCAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RP
ck51bGwoKSAmJiAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSk7
Ci0KLSAgICB0ZXN0REZHKCk7Ci0gICAgSlNDOjpERkc6OmVuc3VyZUdsb2JhbERGR1dvcmtsaXN0
KCk7CiAgICAgdGVzdERGRygpOwotCi0gICAgdGVzdEZUTCgpOwotICAgIEpTQzo6REZHOjplbnN1
cmVHbG9iYWxGVExXb3JrbGlzdCgpOwogICAgIHRlc3RGVEwoKTsKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NTE2Y2Qy
OGY2OWYxNjVlNDMwZTIxYTFiYjQzMjU2NDQ3N2NlYmVhLi41ZGY2OTNlZmQ3ZDcwMWE0MDRiMjU3
OWI2NWM4OWFmODQ4NDBkMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02MDQsNyArNjA0LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKIAogICAgIGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5oCiAgICAgZGZnL0RGR0NvbW1vbi5o
Ci0gICAgZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oCiAgICAgZGZnL0RGR0RvZXNHQ0NoZWNrLmgK
ICAgICBkZmcvREZHTWluaWZpZWRJRC5oCiAKQEAgLTc3MSw2ICs3NzAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGppdC9KSVRDb2RlTWFwLmgK
ICAgICBqaXQvSklUQ29tcGlsYXRpb24uaAogICAgIGppdC9KSVRDb21waWxhdGlvbkVmZm9ydC5o
CisgICAgaml0L0pJVENvbXBpbGF0aW9uTW9kZS5oCiAgICAgaml0L0pJVE1hdGhJQ0ZvcndhcmRz
LmgKICAgICBqaXQvSklUT3BlcmF0aW9ucy5oCiAgICAgaml0L0pJVFN0dWJSb3V0aW5lLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmMwODQwYjYxZTA5MzE2ZjM1ZGQzYzM3MGFl
ZDFhZDM4YWNlZGVhNC4uMTBmYjAzM2VhMWJhYzE2OWUyNWVlMzZjMjE5OWIzZTIzNzFhMWI5NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NCw4ICsxNjQsNiBAQAogCQkwRjFF
M0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBG
OTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUy
MDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkIzOEYxRTE3M0E2NzAw
QTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3M0E2
MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICov
OyB9OwotCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUxQUY3
REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwotCQkwRjFGQjM5NzFFMUFGN0Uz
MDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29y
a2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBNdXRh
dG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OwogCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZFNTFCMTkyMkEzQkMwMDY5
ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAx
NzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLzsgfTsKQEAgLTI3Niw5
ICsyNzQsNiBAQAogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MTAx
NkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovOyB9OwogCQkw
RjJGQ0NGQTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0YzMThBNjAwNzAwMDFB
MjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICovOyB9OwotCQkwRjJGQ0NGQzE4QTYwMDcwMDAx
QTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJGQ0NGNTE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50Lmgg
Ki87IH07Ci0JCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y2MThBNjAw
NzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLzsgfTsKLQkJMEYyRkNDRkYxOEE2MDA3MDAw
MUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRh
LmggKi87IH07CiAJCTBGMzAwQjc4MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3NzE4
QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovOyB9OwogCQkwRjMwMEI3QzE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdBMThBQjFCMTQwMEE2
RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9OwogCQkwRjMwQ0I1
RTFGQ0U0RTM3MDA0QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUQxRkNFNDZCNDAwNEI1MzIzIC8q
IEFsbG9jYXRvckZvck1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzA0LDggKzI5OSw2IEBACiAJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJG
QSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAvKiBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWly
VXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggKi87IH07CiAJCTBG
MzhCMDEyMTdDRjA3ODMwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDEwMTdDRjA3N0YwMEIxNDRE
MyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRp
b25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9OwotCQkw
RjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBC
MTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1eGls
aWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTMxRDQ0
MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0OTkg
LyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzkyQzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwpAQCAt
NDU5LDcgKzQ1Miw2IEBACiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVz
ZURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4OThGMzIxQjI3Njg5RjAwODNB
MzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5OEYzMDFCMjc2ODlGMDA4M0EzM0Mg
LyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY4RjE0MzQx
QURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2gu
aCAqLzsgfTsKLQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFs
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi87IH07
CiAJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUg
LyogRlRMTGluay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk4
MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLzsgfTsKIAkJMEY4
Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3MSAv
KiBDb2RlQmxvY2tIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTU5Miw3ICs1ODQsNiBAQAogCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAg
LyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjQxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCAqLzsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVk
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQ0ExNzNEQTUy
MzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2MTc0ODMwQTIw
MDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xv
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTExQjFGQUU2MUY0
MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8q
IEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTgzLDYgKzExNzQs
MTUgQEAKIAkJNzBFQzBFQzcxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
MEVDMTFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwNjFBRkRC
RUEyMDA0NDk3MzkgLyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAxMUFGREJFQTIwMDQ0OTcz
OSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9iamVj
dERlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MjEzMUJGODI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGNDI2NTg3RUYy
MDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi87IH07CisJCTcyMTMxQkY5MjY1ODdFRjIwMDcx
MTRDRiAvKiBKSVRTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuaCAq
LzsgfTsKKwkJNzIxMzFCRkEyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxMzFCRjYyNjU4N0VG
MjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovOyB9OworCQk3MjEzMUJGQzI2NTg3RUZBMDA3
MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29ya2xp
c3RJbmxpbmVzLmggKi87IH07CisJCTcyNkI5MUIwMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRXb3Jr
bGlzdFRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI2QjkxQTgyNjU4MTY1MjAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmggKi87IH07
CisJCTcyNkI5MUIxMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRCYXNlbGluZVBsYW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkI5MUE5MjY1ODE2NTIw
MDhFNkY4MiAvKiBKSVRCYXNlbGluZVBsYW4uaCAqLzsgfTsKKwkJNzI2QjkxQjMyNjU4MTY1MzAw
OEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QjkxQUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBp
bGF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyNkI5MUI3MjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBRjI2NTgxNjUzMDA4RTZG
ODIgLyogSklUUGxhbi5oICovOyB9OworCQk3MjZCOTFCQTI2NTgyNjNEMDA4RTZGODIgLyogSklU
Q29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5oICov
OyB9OwogCQk3MzExRkEzMjI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczMTFGQTMxMjQw
REIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovOyB9OwogCQk3MzRCNjU1NTIz
RjVDMTA0MDBBMDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzRCNjU1NDIzRjRBMzMxMDBBMDY5RDEgLyog
RGVsZXRlUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzNBRDA2MjkyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0ZUJ5U3RhdHVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0FEMDYy
ODIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0dXMuaCAqLzsgfTsKQEAgLTIzNjIsOCAr
MjM2Miw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlCRTUw
IC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR1Bs
YW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMUZCMzk1MUUxQUY3
REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xpc3RJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk4MUUxRjY1Rjkw
MEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNwcDsg
cGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjUzNywxMSArMjUzNSw2IEBACiAJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEQ0VQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMkZDQ0YyMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdHcmFwaFNhZmVwb2ludC5jcHA7
IHBhdGggPSBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJGQ0NGMzE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR3JhcGhTYWZlcG9pbnQuaDsgcGF0
aCA9IGRmZy9ERkdHcmFwaFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjJGQ0NGNDE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NhZmVwb2ludC5jcHA7IHBhdGggPSBkZmcv
REZHU2FmZXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkNDRjUx
OEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTYWZlcG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdTYWZlcG9pbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R1NjYW5uYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY2FubmFi
bGUuaDsgcGF0aCA9IGRmZy9ERkdTY2FubmFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYyRkNDRjcxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVGhyZWFkRGF0YS5jcHA7IHBhdGgg
PSBkZmcvREZHVGhyZWFkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RocmVhZERhdGEuaDsgcGF0aCA9IGRmZy9ERkdUaHJlYWRE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc3MThBQjA1MTEwMEE2
RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHSW50
ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNrQ29t
YmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4MiwxMCArMjU3NSw2IEBACiAJCTBG
MzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyVXNlQ291bnRzLmg7IHBhdGggPSBiMy9haXIvQWlyVXNlQ291
bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRy
eXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5
cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7IHBhdGggPSBsbGludC9M
TEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzOEIwMTMx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRmZy9E
RkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMzhC
MDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RGR0Nv
bXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMzhCMDE1MTdD
RkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRmZy9E
RkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjM4
QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZnL0RG
R0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4RDJB
MDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYxODg0
MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRGdXp6
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MzUsOCArMjgyNCw2IEBACiAJ
CTBGODk4RjMwMUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25Q
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyUmFuZ2VP
cHRpbWl6YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYxNDJGMUFERjA5MDEw
MEVENzkyQyAvKiBERkdFcG9jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdFcG9jaC5jcHA7IHBhdGggPSBkZmcvREZHRXBvY2guY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRXBvY2guaDsgcGF0aCA9IGRmZy9E
RkdFcG9jaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjhGMTQzMTFBREYwOTAx
MDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTW92SGludFJlbW92YWxQaGFzZS5o
OyBwYXRoID0gZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExM
aW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBE
RkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZElk
ZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA3OCw4ICszMDY1LDYgQEAKIAkJMEZEOEEzMjQx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVk
VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRs
L0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
QjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8q
IERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0g
ZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5
MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQwNjIsNiArNDA0NywyMSBAQAogCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3Mzkg
LyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMTFBRkRCRUEyMDA0NDk3MzkgLyogSlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxMzFCRjMyNjU4N0VGMjAwNzExNENG
IC8qIEpJVFNhZmVwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjEzMUJG
NDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVFNjYW5uYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjEzMUJGNTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFBsYW5TdGFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29ya2xp
c3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdvcmtsaXN0
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFBODI2NTgxNjUy
MDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUV29ya2xpc3RUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI2QjkxQTkyNjU4MTY1MjAwOEU2RjgyIC8qIEpJVEJhc2VsaW5lUGxhbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRCYXNlbGluZVBsYW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUEyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFBsYW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUGxhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUFCMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRD
b21waWxhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29t
cGlsYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUFDMjY1
ODE2NTMwMDhFNkY4MiAvKiBKSVRXb3JrbGlzdFRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRXb3JrbGlzdFRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyNkI5MUFEMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRCYXNlbGluZVBs
YW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQmFzZWxpbmVQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUUyNjU4MTY1MzAw
OEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKSVRDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjZCOTFBRjI2NTgxNjUzMDA4RTZGODIgLyogSklUUGxhbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbktleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIgLyog
SklUQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSklUQ29tcGlsYXRpb25LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MzExRkEzMTI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVsZXRlQnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzMxMUZBMzMyNDBEQjI0OTAwM0Q0OERCIC8qIERlbGV0ZUJ5SWRWYXJpYW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlbGV0ZUJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzMxOTBEOTYyNDAwOTM0OTAwRjg5MUM5IC8qIERlbGV0ZUJ5U3RhdHVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlbGV0ZUJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTYyMzAsNiArNjIzMCw4IEBACiAJCQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhF
MkNGIC8qIEpJVEFsbG9jYXRvci5oICovLAogCQkJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAv
KiBKSVRBcml0aG1ldGljLmNwcCAqLywKIAkJCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyog
SklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLywKKwkJCQk3MjZCOTFBRDI2NTgxNjUzMDA4RTZGODIg
LyogSklUQmFzZWxpbmVQbGFuLmNwcCAqLywKKwkJCQk3MjZCOTFBOTI2NTgxNjUyMDA4RTZGODIg
LyogSklUQmFzZWxpbmVQbGFuLmggKi8sCiAJCQkJRkUzQTA2QUQxQzEwQ0I2RjAwMzkwRkREIC8q
IEpJVEJpdEFuZEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUzQTA2QUUxQzEwQ0I2RjAwMzkwRkRE
IC8qIEpJVEJpdEFuZEdlbmVyYXRvci5oICovLAogCQkJCUZFM0EwNkE3MUMxMEJDNzQwMDM5MEZE
RCAvKiBKSVRCaXRCaW5hcnlPcEdlbmVyYXRvci5oICovLApAQCAtNjI0Niw2ICs2MjQ4LDEwIEBA
CiAJCQkJODZENDQ2RTgyNUIyMTI0ODAwRUNBRTc1IC8qIEpJVENvbXBpbGF0aW9uLmNwcCAqLywK
IAkJCQk4NkQ0NDZFNzI1QjIxMjQ4MDBFQ0FFNzUgLyogSklUQ29tcGlsYXRpb24uaCAqLywKIAkJ
CQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLywK
KwkJCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25LZXkuY3BwICov
LAorCQkJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5oICov
LAorCQkJCTcyNkI5MUFFMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1vZGUuY3Bw
ICovLAorCQkJCTcyNkI5MUFCMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1vZGUu
aCAqLywKIAkJCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNw
cCAqLywKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmgg
Ki8sCiAJCQkJRkUxODdBMEExQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5jcHAg
Ki8sCkBAIC02MjcxLDEwICs2Mjc3LDE2IEBACiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0
IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8sCiAJCQkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmggKi8sCisJCQkJNzI2QjkxQUEyNjU4MTY1MzAwOEU2RjgyIC8qIEpJ
VFBsYW4uY3BwICovLAorCQkJCTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmgg
Ki8sCisJCQkJNzIxMzFCRjYyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovLAog
CQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8s
CiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwICovLAogCQkJCUZFM0EwNkI4MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2Vu
ZXJhdG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRT
aGlmdEdlbmVyYXRvci5oICovLAorCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRT
YWZlcG9pbnQuY3BwICovLAorCQkJCTcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZl
cG9pbnQuaCAqLywKKwkJCQk3MjEzMUJGNDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxl
LmggKi8sCiAJCQkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNw
cCAqLywKIAkJCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAq
LywKIAkJCQlGRTQyMzg4RjFCRTE4QzEyMDA1MTQ3MzcgLyogSklUU3ViR2VuZXJhdG9yLmNwcCAq
LywKQEAgLTYyODUsNiArNjI5Nyw5IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8q
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJREMwMTg0MTcx
RDEwQzE4NzAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmNwcCAqLywKIAkJCQlEQzAxODQxODFEMTBD
MTg3MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCAqLywKKwkJCQk3MjEzMUJGQjI2NTg3RUZBMDA3
MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggKi8sCisJCQkJNzI2QjkxQUMyNjU4MTY1MzAw
OEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmNwcCAqLywKKwkJCQk3MjZCOTFBODI2NTgxNjUy
MDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhE
MDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKIAkJCQk3OTJDQjM0NzFDNEVFRDVDMDBE
MTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovLAogCQkJCTc5MkNCMzQ4MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovLApAQCAtODEwMiwxMCArODExNyw2IEBA
CiAJCQkJMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovLAogCQkJCTBG
RUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCAqLywKIAkJCQkwRkVB
MEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovLAotCQkJCTBGMzhCMDEz
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCi0JCQkJMEYzOEIw
MTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCi0JCQkJMEYzOEIw
MTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCi0JCQkJMEYz
OEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovLAogCQkJCTBG
M0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi8s
CiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8sCkBAIC04MjA5LDggKzgyMjAsNiBAQAogCQkJCUUzODUwQjE0MjI2RUQ2
M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oICovLAogCQkJCTBGMkJEQzRDMTUy
MjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNFMTUy
MjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKLQkJCQkwRjhGMTQzMTFBREYw
OTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8sCi0JCQkJMEY4RjE0
MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAqLywKIAkJCQkw
RkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwICov
LAogCQkJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5oICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLywKQEAgLTgyNTgsNyArODI2Nyw2IEBACiAJCQkJMEYyQjlDREYxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhCODAwOURGNzQ0IC8q
IERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFu
LmggKi8sCi0JCQkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmgg
Ki8sCiAJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyog
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCkBAIC04Mjc1LDExICs4MjgzLDggQEAK
IAkJCQk3OUZDOEEwNzFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5o
ICovLAogCQkJCTc5ODBDMTZBMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0
dXJlU2V0LmNwcCAqLywKIAkJCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0
ZXJlZFN0cnVjdHVyZVNldC5oICovLAotCQkJCTBGMkZDQ0Y0MThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdTYWZlcG9pbnQuY3BwICovLAotCQkJCTBGMkZDQ0Y1MThBNjAwNzAwMDFBMjdGOCAvKiBERkdT
YWZlcG9pbnQuaCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRv
RXhlY3V0ZS5oICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3Ry
aW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovLAotCQkJCTBGMkZDQ0Y2MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJB
RDcgLyogREZHU2NvcmVCb2FyZC5oICovLAogCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAv
KiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8sCiAJCQkJMEYxRTNBNTAxNTM3QzJDQjAw
MEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8sCkBAIC04MzA4LDggKzgzMTMsNiBA
QAogCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLywKLQkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3Rjgg
LyogREZHVGhyZWFkRGF0YS5jcHAgKi8sCi0JCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8q
IERGR1RocmVhZERhdGEuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZH
VGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtz
LmggKi8sCiAJCQkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovLApAQCAtODM0OCw5ICs4MzUxLDYgQEAKIAkJCQkwRkZGQzk1NDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggKi8s
CiAJCQkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmggKi8sCi0JCQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8q
IERGR1dvcmtsaXN0LmNwcCAqLywKLQkJCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZH
V29ya2xpc3QuaCAqLywKLQkJCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29ya2xp
c3RJbmxpbmVzLmggKi8sCiAJCQkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcu
Y3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CkBAIC05NDU4LDcgKzk0NTgsNiBAQAogCQkJ
CUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBp
biBIZWFkZXJzICovLAotCQkJCUZFRjVCNDI5MjYyOEI1MjQwMDE2RTc3NiAvKiBKU1NldElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2MTk3MSAvKiBDb2Rl
QmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYg
LyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywK
QEAgLTk1NzksOCArOTU3OCw2IEBACiAJCQkJMEYwNDM5NkUxQjAzREMwQjAwOTU5OEI3IC8qIERG
R0NvbWJpbmVkTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMw
MDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjM4QjAx
ODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIy
MEIxQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKQEAgLTk2MzksNyArOTYzNiw2IEBACiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAw
OUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODUwQjE1MjI2
RUQ2NDEwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFs
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBE
RkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEUxNzk5
RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
Q0EzRUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTY1
Nyw3ICs5NjUzLDYgQEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVC
NDI3MjYyOEFCRDkwMDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NjcsNyAr
OTY2Miw2IEBACiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRy
ZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQ
bGFuLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZH
UGxhbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VC
MCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJF
MEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTY3OCwxMCArOTY3Miw4IEBA
CiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAv
KiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NG
QzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGRDE4QTYwMDcw
MDAxQTI3RjggLyogREZHU2Nhbm5hYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEz
MkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC05Njk3LDcgKzk2ODksNiBAQAogCQkJCTBGQzIw
Q0I2MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4
IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyRkND
RkYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTcx
Nyw4ICs5NzA4LDYgQEAKIAkJCQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcy
NTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDOTdGNDIxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBE
RkdXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUw
IC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5
MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTc1Miw2ICs5NzQxLDcgQEAKIAkJCQkxNDczNDFEMjFE
QzAyRTJFMDBBQTI5QkEgLyogRXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRUY1QjQzMDI2MkEzMzhCMDAxNkU3NzYgLyogRXhjZXB0aW9uRXhw
ZWN0YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0RSAv
KiBFeGNlcHRpb25GdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwMDBFMTZGNUNEMDBC
MzQ0NjAgLyogRXhjZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2NDkxMzcx
RDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAgLTk3
ODgsNyArOTc3OCw2IEBACiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExF
eGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDIzMjYy
OEEwRUUwMDE2RTc3NiAvKiBIYXNoTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjM1QkQ2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFBy
b3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFC
NSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC05ODMyLDcgKzk4MjEsNiBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxs
R0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkVFRDc5NDI0OTJCODcw
MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5
MTBEMURDQTkyOTQwMDE0RjlGRSAvKiBGdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRkVGNUI0MkMyNjI4Q0JDODAwMTZFNzc2IC8qIFZNVHJhcHNJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAw
NURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtOTkx
MSw2ICs5ODk5LDcgQEAKIAkJCQkxNDJFMzEzNjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxl
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBI
YXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjMyNjI4QTBFRTAwMTZFNzc2
IC8qIEhhc2hNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlERkNCREIxRDg4
QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0QkE3QTk4MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MTc3QTFEQzIyRjk1OEQ1MDBCMzRDQTIgLyogSGVhcEFuYWx5emVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwMDUzLDYgKzEwMDQyLDcgQEAKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyog
SklULmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTEyMjAyNzFCRTdGNThDMDAzOUU2RjIgLyogSklU
QWRkR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc1QTA2NjIwMTNFNEYxMDAzOEUy
Q0YgLyogSklUQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCOTFCMTI2NTgxNjUz
MDA4RTZGODIgLyogSklUQmFzZWxpbmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZC
MjFDMTBDQjg5MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTNBMDZBODFDMTBCQzgxMDAzOTBGREQgLyogSklUQml0QmluYXJ5T3BHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkE2MUMxMEI3MkQwMDM5MEZERCAvKiBKSVRCaXRP
ckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA2Miw2ICsxMDA1Miw4IEBACiAJCQkJ
RkU0NzZGRjQyMDdFODVENTAwOTNDQTJEIC8qIEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RDQ0NkVDMjVCMjEyNjAwMEVDQUU3NSAvKiBKSVRDb21waWxhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZm
b3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCOTFCQTI2NTgyNjNEMDA4RTZGODIgLyogSklU
Q29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkI5MUIzMjY1ODE2NTMwMDhF
NkY4MiAvKiBKSVRDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZF
MTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMTg3QTBEMUMwMzBENUMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDY4MDgyMTRCQTU3MkQwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwMDc3LDEyICsxMDA2OSwxOCBAQAogCQkJCTg2RDQ0NkVBMjVCMjEy
NTMwMEVDQUU3NSAvKiBKSVRPcGFxdWVCeXByb2R1Y3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
M0NBM0E0RTI1MjdBQjJGMDA0ODAyQkYgLyogSklUT3BlcmF0aW9uTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyNkI5MUI3MjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjEzMUJGQTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmln
aHRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxMzFCRjkyNjU4N0VGMjAw
NzExNENGIC8qIEpJVFNhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxMzFCRjgyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFNjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZE
MzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMwMTg0MTkxRDEw
QzE4OTAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjEzMUJG
QzI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjZCOTFCMDI2NTgxNjUzMDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBE
RDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTg0LDYg
KzEwMTgyLDcgQEAKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01h
bmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JFOEVC
MDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFRjVCNDI1MjYyOEE4NTAw
MDE2RTc3NiAvKiBKU01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjk2MTgy
RDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBC
Mjg2RDFFQjhFNkQ1MDAwRUI1RDIgLyogSlNNYXJraW5nQ29uc3RyYWludFByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU01pY3JvdGFzay5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDIxOSw2ICsxMDIxOCw3IEBACiAJCQkJMTREMDFBNzcyMUZC
MzUxRjAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFRjVCNDI5MjYyOEI1MjQwMDE2RTc3NiAvKiBKU1NldElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBK
U1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCREZDQjJCQkU5MEY0MTM0OUUxQjBC
RUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMTAyNDcsMTIgKzEwMjQ3
LDEyIEBACiAJCQkJODZFM0M2MTIxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTFGOEY4MjE1NDcxNUEwMDAxRERCQyAvKiBKU1ZhbHVl
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkU4QzAzMTIyNjRBNjkxMTAwMUE0NEFEIC8q
IFNsb3dQYXRoRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJDMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1ZhbHVlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNTE2N0JB
QkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzk1QUM2MTgyMEEyMzU1RTAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hp
bmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFODE3REE0MUFFMDA2NTM4QUYg
LyogSlNXZWFrTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUY1QjQyNzI2MjhBQkQ5MDAxNkU3
NzYgLyogSlNXZWFrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQjAyMkFEM0NEQzAwMjNGNEMwIC8qIEpT
V2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDUzMSw2ICsxMDUzMSw3IEBACiAJ
CQkJQzIxNjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkUwNDE1NTMyNTJFQzA3MzAwOTFFQjVEIC8qIFNsb3RWaXNpdG9yTWFj
cm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xv
d1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRThDMDMxMjI2NEE2OTExMDAxQTQ0QUQg
LyogU2xvd1BhdGhGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QjRBMzMxQzg0RjBE
NjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTNGMjNBODIxRUNGMTNGRTAwOTc4RDk5IC8qIFNuaXBwZXQuaCBpbiBIZWFkZXJzICovLApA
QCAtMTA1NjgsNyArMTA1NjksNiBAQAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBT
dHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAv
KiBTdHJ1Y3R1cmVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAw
NTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUY1QjQyNTI2
MjhBODUwMDAxNkU3NzYgLyogSlNNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFB
QTMxMjE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA2NjEsNiArMTA2NjEsNyBAQAogCQkJCUZFMzAyMkQ3
MUU0Mjg1NzMwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVD
NTc5NzMyMzEwNUI1MTAwQkNBODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU2RjU2REUxRTY0RUFENjAwRDE3ODAxIC8qIFZNVHJhcHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFRjVCNDJDMjYyOENCQzgwMDE2RTc3NiAvKiBWTVRyYXBzSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8q
IFdhc21CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0NBNzMwQTFFQTUzM0Q4
MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovLApAQCAtMTA3NTMsNyArMTA3
NTQsNiBAQAogCQkJCUFERTgwMjlBMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtF
cnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBREU4MDI5QzFFMDhGMURFMDA1
OERFNzggLyogV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQkY1MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUY1QjQzMDI2MkEzMzhCMDAxNkU3NzYgLyogRXhj
ZXB0aW9uRXhwZWN0YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzFBMURCNTlDQjIw
MEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUQyRkNCRjcxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TWVtb3J5UHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxQjFEQjU5Q0IyMDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAzZWVmYTA0ZGI1MTM1NTM1ZWVmYWRmZDczMTc2NTQ4MTNh
Njg2NmM4Li5kODAyNDI2MjBiOTIzM2MxNjhlYjVlYzY2NjdiMzYzZTg0MjI0ZmE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDEsOCArMzQxLDYgQEAgZGZnL0RGR0NvZGVPcmlnaW5Q
b29sLmNwcAogZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCiBkZmcvREZHQ29tbW9uLmNwcAog
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCi1kZmcvREZHQ29tcGlsYXRpb25LZXkuY3BwCi1kZmcvREZH
Q29tcGlsYXRpb25Nb2RlLmNwcAogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAogZGZn
L0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAKIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmNwcApAQCAtNDE2LDcgKzQxNCw2IEBAIGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJl
U2V0LmNwcAogZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCi1kZmcvREZHU2FmZXBvaW50LmNw
cAogZGZnL0RGR1NuaXBwZXRQYXJhbXMuY3BwCiAvLyBUaGVzZSBmaWxlcyB0YWtlIGEgbG9uZyB0
aW1lIHRvIGNvbXBpbGUgc28gd2UgZG8gdGhlbSBpbmRpdmlkdWFsbHkuCiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIEBuby11bmlmeQpAQCAtNDI4LDcgKzQyNSw2IEBAIGRmZy9ERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCiBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuY3BwCiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKIGRmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmNwcAotZGZnL0RGR1RocmVhZERhdGEuY3BwCiBkZmcvREZHVGh1bmtz
LmNwcAogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCiBkZmcvREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCkBAIC00NDgsNyArNDQ0LDYgQEAgZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuY3BwCiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKIGRmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCiBkZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAKLWRmZy9ERkdXb3JrbGlzdC5jcHAKIAogZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcAogZGlzYXNzZW1ibGVyL0NhcHN0b25lRGlzYXNzZW1ibGVyLmNw
cApAQCAtNjQxLDYgKzYzNiw3IEBAIGppdC9KSVQuY3BwCiBqaXQvSklUQWRkR2VuZXJhdG9yLmNw
cAogaml0L0pJVEFyaXRobWV0aWMuY3BwCiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAoraml0
L0pJVEJhc2VsaW5lUGxhbi5jcHAKIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklU
Qml0T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcApAQCAtNjQ4LDYg
KzY0NCw4IEBAIGppdC9KSVRDYWxsLmNwcAogaml0L0pJVENhbGwzMl82NC5jcHAKIGppdC9KSVRD
b2RlLmNwcAogaml0L0pJVENvbXBpbGF0aW9uLmNwcAoraml0L0pJVENvbXBpbGF0aW9uS2V5LmNw
cAoraml0L0pJVENvbXBpbGF0aW9uTW9kZS5jcHAKIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwCiBq
aXQvSklURGl2R2VuZXJhdG9yLmNwcAogaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC02NTksMTQg
KzY1NywxNyBAQCBqaXQvSklUT3BhcXVlQnlwcm9kdWN0cy5jcHAKIGppdC9KSVRPcGNvZGVzLmNw
cAogaml0L0pJVE9wY29kZXMzMl82NC5jcHAKIGppdC9KSVRPcGVyYXRpb25zLmNwcAoraml0L0pJ
VFBsYW4uY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKIGppdC9KSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcAoraml0L0pJVFNhZmVw
b2ludC5jcHAKIGppdC9KSVRTdHViUm91dGluZS5jcHAKIGppdC9KSVRTdWJHZW5lcmF0b3IuY3Bw
CiBqaXQvSklUVGh1bmtzLmNwcAogaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAogaml0L0pJVFdvcmtsaXN0LmNwcAoraml0L0pJVFdvcmtsaXN0VGhyZWFkLmNwcAog
aml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAogaml0L1JlZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggNTYzODhhMDZkN2M2MmQ0OGRkNzgwOWI2NDA2ZGFiYTAwNWY4YzkxYy4u
N2RmMDVlMTBiYzkwYjY1NmYzNTAzYzg1YzA1NGM1ZDNhZmE3YzZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQzLDcgKzQzLDYgQEAKICNp
bmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJF
dmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJG
dW5jdGlvbkNvZGVCbG9jay5oIgpAQCAtNTUsNiArNTQsNyBAQAogI2luY2x1ZGUgIklzb0NlbGxT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCisj
aW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCkBAIC0y
NTk4LDkgKzI1OTgsOCBAQCBpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUo
aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6
YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
REZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RP
ck51bGwoKSkgewotICAgICAgICBpZiAod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpD
b21waWxhdGlvbktleSh0aGlzLCBERkc6OkRGR01vZGUpKQotICAgICAgICAgICAgPT0gREZHOjpX
b3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICBpZiAoSklUV29ya2xpc3QqIHdvcmtsaXN0ID0gSklU
V29ya2xpc3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKSkgeworICAgICAgICBpZiAo
d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoSklUQ29tcGlsYXRpb25LZXkodGhpcywgSklUQ29t
cGlsYXRpb25Nb2RlOjpERkcpKSA9PSBKSVRXb3JrbGlzdDo6Q29tcGlsZWQpIHsKICAgICAgICAg
ICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCmluZGV4IDgyYjE0NmRmYjAyZjYzNDVjZmZiNTZjZjZhMDJjNzFhZTIwZDg0NWYuLmNj
ZTc4MmMxZTNjNzgwOTVhYTRmNTc1ZjAxZDJmNjU1YjQzMWJmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC02OTcwLDcgKzY5NzAs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JFbnRyeU1vZGUp
IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpGVExGb3JPU1JFbnRyeSkgewogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2NhdGNoKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgKaW5kZXggYjA0NjE3YzU2MGI2NjcyOGExNWI4MTQwYmU5ZTIzODA4ODA1MTlhNS4uMzY2MDZj
ZDRjODY0ZWJmZjNjZDRhOWFiZTVhNjRlMGRkNmU2ZTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTAgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKLQogI2lmIEVOQUJMRShERkdfSklUKQogCisj
aW5jbHVkZSAiSklUQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2lu
Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTY2
LDE3ICs2NSwxNyBAQCBlbnVtIFN3aXRjaEtpbmQgewogICAgIFN3aXRjaENlbGwKIH07CiAKLWlu
bGluZSBib29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoQ29tcGlsYXRpb25Nb2RlIG1vZGUg
PSBERkdNb2RlKQoraW5saW5lIGJvb2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChKSVRDb21w
aWxhdGlvbk1vZGUgbW9kZSA9IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogewogICAgIHJldHVy
biBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKSB8fCBPcHRpb25zOjpkdW1wR3JhcGhBdEVh
Y2hQaGFzZSgpIHx8IChpc0ZUTChtb2RlKSAmJiBPcHRpb25zOjp2ZXJib3NlRlRMQ29tcGlsYXRp
b24oKSk7CiB9CiAKLWlubGluZSBib29sIGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhDb21waWxhdGlv
bk1vZGUgbW9kZSA9IERGR01vZGUpCitpbmxpbmUgYm9vbCBsb2dDb21waWxhdGlvbkNoYW5nZXMo
SklUQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAg
ICByZXR1cm4gdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChtb2RlKSB8fCBPcHRpb25zOjpsb2dD
b21waWxhdGlvbkNoYW5nZXMoKTsKIH0KIAotaW5saW5lIGJvb2wgc2hvdWxkRHVtcEdyYXBoQXRF
YWNoUGhhc2UoQ29tcGlsYXRpb25Nb2RlIG1vZGUpCitpbmxpbmUgYm9vbCBzaG91bGREdW1wR3Jh
cGhBdEVhY2hQaGFzZShKSVRDb21waWxhdGlvbk1vZGUgbW9kZSA9IEpJVENvbXBpbGF0aW9uTW9k
ZTo6REZHKQogewogICAgIGlmIChpc0ZUTChtb2RlKSkKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6
OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCkgfHwgT3B0aW9uczo6ZHVtcERGR0ZUTEdyYXBoQXRFYWNo
UGhhc2UoKTsKQEAgLTM1OSw3ICszNTgsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0
VXBwZXJCb3VuZChDYXBhYmlsaXR5TGV2ZWwgYSwgQ2FwYWJpbGl0eUxldmVsIGIpCiB9CiAKIC8v
IFVuY29uZGl0aW9uYWxseSBkaXNhYmxlIERGRyBkaXNhc3NlbWJseSBzdXBwb3J0IGlmIHRoZSBE
RkcgaXMgbm90IGNvbXBpbGVkIGluLgotaW5saW5lIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5
KENvbXBpbGF0aW9uTW9kZSBtb2RlID0gREZHTW9kZSkKK2lubGluZSBib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseShKSVRDb21waWxhdGlvbk1vZGUgbW9kZSA9IEpJVENvbXBpbGF0aW9uTW9kZTo6
REZHKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSB8fCAoaXNGVEwobW9k
ZSkgJiYgT3B0aW9uczo6ZHVtcEZUTERpc2Fzc2VtYmx5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTE0MTZmZmJlYTI4ZjFhZDMyYjM0NjFjNTg0Yjk3MjAxN2FiMGRhZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uS2V5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uS2V5LmgiCi0K
LSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBpZiAoISp0aGlzKSB7Ci0gICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG91dC5wcmludCgi
KENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsK
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwZDQ2ZjVlZGEzOWEwNjc1MzdjNmM4MGU5MTJjNGNhNmQyMzgxNzI3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25LZXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2Nr
OwotY2xhc3MgQ29kZUJsb2NrU2V0OwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgQ29tcGls
YXRpb25LZXkgewotcHVibGljOgotICAgIENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3By
b2ZpbGVkQmxvY2sobnVsbHB0cikKLSAgICAgICAgLCBtX21vZGUoSW52YWxpZENvbXBpbGF0aW9u
TW9kZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikK
LSAgICAgICAgLCBtX21vZGUoREZHTW9kZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbXBp
bGF0aW9uS2V5KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUp
Ci0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCi0gICAgICAgICwgbV9t
b2RlKG1vZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSW52
YWxpZENvbXBpbGF0aW9uTW9kZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9j
ayAmJiBtX21vZGUgIT0gSW52YWxpZENvbXBpbGF0aW9uTW9kZTsKLSAgICB9Ci0gICAgCi0gICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2Nr
OyB9Ci0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
LSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29tcGlsYXRpb25LZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3By
b2ZpbGVkQmxvY2sKLSAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7Ci0gICAg
fQotICAgIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJvZmls
ZWRCbG9jayksIG1fbW9kZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwot
ICAgIENvbXBpbGF0aW9uTW9kZSBtX21vZGU7Ci19OwotCi1zdHJ1Y3QgQ29tcGlsYXRpb25LZXlI
YXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb21waWxhdGlvbktleSYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29t
cGlsYXRpb25LZXkmIGEsIGNvbnN0IENvbXBpbGF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09IGI7
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkNvbXBpbGF0aW9uS2V5PiA6IEpTQzo6
REZHOjpDb21waWxhdGlvbktleUhhc2ggeyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFzaFRyYWl0czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkNv
bXBpbGF0aW9uS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6Q29tcGlsYXRp
b25LZXk+IHsgfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk5ZDk1MzMxY2Q4MTE3MTJmMDY3MDg0NTM3N2M5YmY0OGFlODlhYjYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCi0KLSNpZiBF
TkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M6
OkRGRzsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbXBpbGF0aW9u
TW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW52YWxpZENvbXBp
bGF0aW9uTW9kZToKLSAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkQ29tcGlsYXRpb25Nb2RlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIERGR01vZGU6Ci0gICAgICAgIG91dC5wcmludCgi
REZHTW9kZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGVExNb2RlOgotICAgICAgICBv
dXQucHJpbnQoIkZUTE1vZGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRlRMRm9yT1NS
RW50cnlNb2RlOgotICAgICAgICBvdXQucHJpbnQoIkZUTEZvck9TUkVudHJ5TW9kZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25Nb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0YzhhODM5MTU1ZTdjNGIwYjlkOTY4NjJhYTJkNDg0N2QxNTlmY2FhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tcGlsYXRpb25Nb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKLQotZW51bSBDb21waWxhdGlvbk1vZGUgewotICAgIEludmFsaWRDb21waWxh
dGlvbk1vZGUsCi0gICAgREZHTW9kZSwKLSAgICBGVExNb2RlLAotICAgIEZUTEZvck9TUkVudHJ5
TW9kZQotfTsKLQotaW5saW5lIGJvb2wgaXNGVEwoQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi17Ci0g
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NS
RW50cnlNb2RlOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLW5h
bWVzcGFjZSBXVEYgewotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRG
Rzo6Q29tcGlsYXRpb25Nb2RlKTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKaW5kZXggZTMzMGM2MGYxMTE0NzhkMzc0MDVhMjhiMzhj
ZjQ2MGJhNmRhNzU2ZC4uNmQ1YTQ0MDk4MjI3YjU5NTVkODI1OGQyNGVlYmRhOGMyODUxZDhkZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDkg
QEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1
ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRnVu
Y3Rpb25BbGxvd2xpc3QuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUV29y
a2xpc3QuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3Jz
LmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRp
YyBGdW5jdGlvbkFsbG93bGlzdCYgZW5zdXJlR2xvYmFsREZHQWxsb3dsaXN0KCkKIH0KIAogc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9u
TW9kZSBtb2RlLAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRERkdDb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLAogICAgIEJ5dGVj
b2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxK
U1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKQEAgLTg1LDIwICs4NSwxMyBAQCBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgICAgICpuZXcgUGxhbihjb2RlQmxvY2ssIHBy
b2ZpbGVkREZHQ29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5k
bGVWYWx1ZXMpKTsKIAogICAgIHBsYW4tPnNldENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsK
LSAgICBpZiAoT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFdvcmtsaXN0
JiB3b3JrbGlzdCA9IGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKG1vZGUpOwotICAgICAgICBpZiAo
bG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpKQotICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJy
aW5nIERGRyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHdpdGggcXVldWUgbGVuZ3Ro
ICIsIHdvcmtsaXN0LnF1ZXVlTGVuZ3RoKCksICIuXG4iKTsKLSAgICAgICAgd29ya2xpc3QuZW5x
dWV1ZShXVEZNb3ZlKHBsYW4pKTsKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRGVmZXJyZWQ7
Ci0gICAgfQotICAgIAotICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChudWxscHRyKTsKLSAgICBy
ZXR1cm4gcGxhbi0+ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKTsKKyAgICBKSVRX
b3JrbGlzdCYgd29ya2xpc3QgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgJiYgbG9nQ29tcGls
YXRpb25DaGFuZ2VzKG1vZGUpLCAiRGVmZXJyaW5nIERGRyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIHdpdGggcXVldWUgbGVuZ3RoICIsIHdvcmtsaXN0LnF1ZXVlTGVuZ3RoKCksICIu
XG4iKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKIH0KICNl
bHNlIC8vIEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAotICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCBC
eXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAorICAgIFZN
JiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUlu
ZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAogICAgIFJlZjxEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYpCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVk
OwpAQCAtMTA2LDE1ICs5OSwxMyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoCi0gICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxl
ZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCisgICAgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgSklUQ29tcGls
YXRpb25Nb2RlIG1vZGUsCiAgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKICAg
ICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvbXBpbGVJbXBsKAogICAgICAgICB2bSwgY29kZUJs
b2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBt
dXN0SGFuZGxlVmFsdWVzLAogICAgICAgICBjYWxsYmFjay5jb3B5UmVmKCkpOwotICAgIGlmIChy
ZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCkKLSAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0
aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
aAppbmRleCBjN2JhN2Y2YWM3N2VkYjZkMzhkYTFiY2JmYTRmZmZjMWQ3NDg1OWRjLi4yYTFjOWMx
MDE3ZTJjNTNlMjkyYzBjM2Y5OTliZmYwNDE3ZTJkODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQxLDcgKzQwLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQg
Z2V0TnVtQ29tcGlsYXRpb25zKCk7CiAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdl
IGRvIGEgY29uY3VycmVudCBjb21waWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwog
Ly8gY29tcGlsZS4gRXZlbiBpZiB3ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwg
dGhlIGNhbGxiYWNrIHdpdGggdGhlIHJlc3VsdC4KIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUo
Ci0gICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBD
b21waWxhdGlvbk1vZGUsCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVk
REZHQ29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUsCiAgICAgQnl0ZWNvZGVJbmRleCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVz
dEhhbmRsZVZhbHVlcywKICAgICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiYmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IGQyYmQ4OTdkNGY4NDVjNjg2
ODU4NmRhZjJiYmM3NDkxYTM4YTE4ZDkuLjliNjg0ZWUzMGU0ZGM1ZDJiOThkYTk4YzZjMjk4MWU2
N2FlMjFhYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTM2LDggKzM2
LDggQEAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1
ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5oIgotI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2lu
Y2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCisjaW5jbHVkZSAiSklUU2Nhbm5hYmxlLmgi
CiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0
Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCmluZGV4IGY1N2YyNDYwNGMwZDM1NjJj
OTQ3OGRkNzgyOTQ0ZDczYzkyYjllYzEuLmY1YTZmZDZmMjA2YjJjZDNkMDRlZGRhNWM3N2E1MTM4
M2U1ODYzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGhT
YWZlcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBv
aW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJE
RkdTYWZlcG9pbnQuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCA0ODVj
Nzc0N2JhNDAxNDE4Yzk2MjdhNGQ4MzQ0ZDdiMjM3YWMxYmZjLi41YjJmYzA1ZmYxOGQyYWMzM2Mz
Y2Y4YTYwNWRhNjEzYTJjOGMzODY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NjYsNyArMTY2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUg
YWJsZSB0byBkbyBhdCBsZWFzdCBzb21lIHZhbGlkYXRpb24gd2hlbiBPU1IgZW50ZXJpbmcuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU1MTEKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlN
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgp
ICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2YWlsYWJpbGl0eU1hcC5tX2xv
Y2Fscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApp
bmRleCA4ZWFlODFmNDk1YWRkODhkM2ZhNzNlZGE4MmFlNWRiNDZkNzMyNGIzLi4zYjEwODNmNjE4
MWI1N2Q5N2M5ZTlmZmZiY2U3Y2FkN2UxODE0OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JF
bnRyeU1vZGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2RlKCkg
PT0gSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeSk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKIAogICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4
IGUxODE3YTFjYzFlOTM1NGQ0YjI1ZjlmYjA1YmE1MGU2NWVhMzQzNmEuLmUzMzY5OGU4ZTY1MWEz
NjkzMTQ5YmMwODI5YzU2MzliYmRjNTMxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgog
I2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgog
I2luY2x1ZGUgIkhhc093blByb3BlcnR5Q2FjaGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNBcnJheUlubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9y
LmgiCkBAIC0zNzAxLDE0ICszNzAxLDEwIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNl
bWVudENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0
ZTsKLSAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlz
dE9yTnVsbCgpKSB7Ci0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVB
bGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSkpOwotICAgIH0gZWxzZQotICAgICAgICB3
b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIEpJVFdvcmtsaXN0OjpTdGF0
ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAgIHZtLCBKSVRDb21waWxhdGlvbktleShj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBKSVRDb21waWxhdGlvbk1vZGU6OkZUTCkpOwog
ICAgIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAg
ICBpZiAod29ya2xpc3RTdGF0ZSA9PSBKSVRXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwgKCJzdGls
bCBjb21waWxpbmciKSk7CiAgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKICAgICAgICAgICAgIGNvZGVCbG9jaywgQ29tcGls
YXRpb25EZWZlcnJlZCk7CkBAIC0zNzIzLDcgKzM3MTksNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2Vy
RlRMUmVwbGFjZW1lbnRDb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
ZGUqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUg
PT0gV29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29y
a2xpc3Q6OkNvbXBpbGVkKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2Nr
LCAiZGVsYXlGVExDb21waWxlIiwgKCJjb21waWxlZCBhbmQgZmFpbGVkIikpOwogICAgICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVo
b3c7IGluIHRoYXQgY2FzZSB0aGUKICAgICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBh
cHByb3ByaWF0ZWx5LgpAQCAtMzczNCw3ICszNzMwLDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZU
TFJlcGxhY2VtZW50Q29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2Rl
KgogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2Vt
ZW50IiwgKCkpOwogICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21w
aWxlKAotICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ss
IEZUTE1vZGUsIEJ5dGVjb2RlSW5kZXgoKSwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGU6OkZUTCwgQnl0ZWNvZGVJ
bmRleCgpLAogICAgICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElmIHdlIHJlYWNo
ZWQgaGVyZSwgdGhlIGNvdW50ZXIgaGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBub3cuCkBAIC0z
NzkwLDEyICszNzg2LDggQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9yaWdpbkJ5dGUKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICAvLyBSZXNvbHZlIGFu
eSBwZW5kaW5nIHBsYW4gZm9yIE9TUiBFbnRlciBvbiB0aGlzIGZ1bmN0aW9uLgotICAgIFdvcmts
aXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOwotICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSBl
eGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkpIHsKLSAgICAgICAgd29ya2xpc3RTdGF0
ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAgICAgICAgICAgIHZt
LCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JF
bnRyeU1vZGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0
OjpOb3RLbm93bjsKKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdv
cmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KAorICAgICAgICB2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeSkpOwogCiAgICAgSklUQ29k
ZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKQEAgLTM4MjMs
NyArMzgxNSw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQnl0ZWNvZGVJbmRleCBvcmlnaW5CeXRlCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgaWYg
KHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGluZykgewogICAgICAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgic3RpbGwgY29t
cGlsaW5nIikpOwogICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zODc0LDcgKzM4NjYsNyBAQCBzdGF0aWMgY2hhciog
dGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXgg
b3JpZ2luQnl0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0g
V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xp
c3Q6OkNvbXBpbGVkKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAi
ZGVsYXlGVExDb21waWxlIiwgKCJjb21waWxlZCBhbmQgZmFpbGVkIikpOwogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgY29tcGlsYXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUg
dGhyZXNob2xkcy4KICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
Q29kZSBibG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBo
YXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudC4iKTsKQEAgLTM5ODUsNyArMzk3Nyw3IEBAIHN0
YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQnl0
ZWNvZGVJbmRleCBvcmlnaW5CeXRlCiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgInRyaWdnZXJGVExPU1IiLCAoKSk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlS
ZXN1bHQgPSBjb21waWxlKAotICAgICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVC
bG9jaywgRlRMRm9yT1NSRW50cnlNb2RlLCBvcmlnaW5CeXRlY29kZUluZGV4LAorICAgICAgICB2
bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpG
VExGb3JPU1JFbnRyeSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KHRyaWdnZXJBZGRyZXNzKSk7CiAKICAgICBpZiAoaml0Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKaW5kZXggNzlhYTZjNmJlODI4Y2Zj
YjI5ODYwYWZhYzZhMThlODMyYTYwNDVkZi4uMzBhNDk0ZmZjMWY4MTJlY2I0MmIzMzJjMjY0OTA5
NzY4ZDEyMTVmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC04OCwx
NSArODgsNiBAQAogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIEpT
QyB7Ci0KLWV4dGVybiBTZWNvbmRzIHRvdGFsREZHQ29tcGlsZVRpbWU7Ci1leHRlcm4gU2Vjb25k
cyB0b3RhbEZUTENvbXBpbGVUaW1lOwotZXh0ZXJuIFNlY29uZHMgdG90YWxGVExERkdDb21waWxl
VGltZTsKLWV4dGVybiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKLQotfQotCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTMsMTcgKzEw
NCwxOCBAQCB2b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIq
IHRleHQsIGJvb2wgZm9yY2VEdW1wID0gZmFsc2UpCiAgICAgICAgIHZhbGlkYXRlKGdyYXBoLCBt
b2RlRm9yRmluYWxWYWxpZGF0ZSk7CiB9CiAKLVByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJv
ZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQorUHJvZmls
ZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUoSklUQ29t
cGlsYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnZh
bGlkQ29tcGlsYXRpb25Nb2RlOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb246CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gUHJvZmls
ZXI6OkRGRzsKLSAgICBjYXNlIERGR01vZGU6CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6
OkRGRzoKICAgICAgICAgcmV0dXJuIFByb2ZpbGVyOjpERkc7Ci0gICAgY2FzZSBGVExNb2RlOgor
ICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6CiAgICAgICAgIHJldHVybiBQcm9maWxl
cjo6RlRMOwotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgorICAgIGNhc2UgSklUQ29tcGls
YXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeToKICAgICAgICAgcmV0dXJuIFByb2ZpbGVyOjpGVExG
b3JPU1JFbnRyeTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTEzMywyMCArMTI1LDE3IEBAIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJvZmlsZXJDb21w
aWxhdGlvbktpbmRGb3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQogfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCiAKIFBsYW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIENvZGVC
bG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIEJ5
dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIEpJVENvbXBpbGF0aW9uTW9k
ZSBtb2RlLCBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICBjb25zdCBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgOiBtX21v
ZGUobW9kZSkKLSAgICAsIG1fdm0oJnBhc3NlZENvZGVCbG9jay0+dm0oKSkKLSAgICAsIG1fY29k
ZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKLSAgICAsIG1fcHJvZmlsZWRERkdDb2RlQmxvY2socHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZh
bHVlcykKLSAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKLSAgICAsIG1fY29tcGlsYXRpb24oVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKSA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24obV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLCBwcm9maWxlckNv
bXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IG51bGxwdHIpCi0gICAgLCBtX2lubGluZUNh
bGxGcmFtZXMoYWRvcHRSZWYobmV3IElubGluZUNhbGxGcmFtZVNldCgpKSkKLSAgICAsIG1faWRl
bnRpZmllcnMobV9jb2RlQmxvY2spCi0gICAgLCBtX3dlYWtSZWZlcmVuY2VzKG1fY29kZUJsb2Nr
KQotICAgICwgbV90cmFuc2l0aW9ucyhtX2NvZGVCbG9jaykKLSAgICAsIG1fc3RhZ2UoUHJlcGFy
aW5nKQorICAgICAgICA6IEpJVFBsYW4obW9kZSwgcGFzc2VkQ29kZUJsb2NrKQorICAgICAgICAs
IG1fcHJvZmlsZWRERkdDb2RlQmxvY2socHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgICwg
bV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCisgICAgICAgICwgbV9vc3JFbnRy
eUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICAsIG1fY29tcGls
YXRpb24oVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSA/IGFkb3B0UmVmKG5l
dyBQcm9maWxlcjo6Q29tcGlsYXRpb24obV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1
cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1v
ZGUobW9kZSkpKSA6IG51bGxwdHIpCisgICAgICAgICwgbV9pbmxpbmVDYWxsRnJhbWVzKGFkb3B0
UmVmKG5ldyBJbmxpbmVDYWxsRnJhbWVTZXQoKSkpCisgICAgICAgICwgbV9pZGVudGlmaWVycyht
X2NvZGVCbG9jaykKKyAgICAgICAgLCBtX3dlYWtSZWZlcmVuY2VzKG1fY29kZUJsb2NrKQorICAg
ICAgICAsIG1fdHJhbnNpdGlvbnMobV9jb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdENvZGUoKSk7CiAgICAgbV9pbmxpbmVDYWxs
RnJhbWVzLT5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CkBAIC0xNTYsODQgKzE0NSwzOCBAQCBQ
bGFuOjp+UGxhbigpCiB7CiB9CiAKLWJvb2wgUGxhbjo6Y29tcHV0ZUNvbXBpbGVUaW1lcygpIGNv
bnN0CitzaXplX3QgUGxhbjo6Y29kZVNpemUoKSBjb25zdAogewotICAgIHJldHVybiByZXBvcnRD
b21waWxlVGltZXMoKQotICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1l
cygpCi0gICAgICAgIHx8IChtX3ZtICYmIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcik7Cisg
ICAgaWYgKCFtX2ZpbmFsaXplcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZmlu
YWxpemVyLT5jb2RlU2l6ZSgpOwogfQogCi1ib29sIFBsYW46OnJlcG9ydENvbXBpbGVUaW1lcygp
IGNvbnN0Cit2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiB7Ci0gICAgcmV0dXJuIE9wdGlvbnM6
OnJlcG9ydENvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8IE9wdGlvbnM6OnJlcG9ydERGR0NvbXBp
bGVUaW1lcygpCi0gICAgICAgIHx8IChPcHRpb25zOjpyZXBvcnRGVExDb21waWxlVGltZXMoKSAm
JiBpc0ZUTCgpKTsKKyAgICBBU1NFUlQobV92bSk7CisgICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZp
bmFsaXplV2l0aG91dERlbGV0aW5nKCptX3ZtKTsKIH0KIAotdm9pZCBQbGFuOjpjb21waWxlSW5U
aHJlYWQoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSkKK3ZvaWQgUGxhbjo6bm90aWZ5UmVhZHkoKQog
ewotICAgIG1fdGhyZWFkRGF0YSA9IHRocmVhZERhdGE7Ci0KLSAgICBNb25vdG9uaWNUaW1lIGJl
Zm9yZSB7IH07Ci0gICAgQ1N0cmluZyBjb2RlQmxvY2tOYW1lOwotICAgIGlmIChVTkxJS0VMWShj
b21wdXRlQ29tcGlsZVRpbWVzKCkpKQotICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKLSAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRpbWVzKCkpKQotICAgICAgICBj
b2RlQmxvY2tOYW1lID0gdG9DU3RyaW5nKCptX2NvZGVCbG9jayk7Ci0KLSAgICBDb21waWxhdGlv
blNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7Ci0KLSAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2Vz
KG1fbW9kZSkgfHwgT3B0aW9uczo6bG9nUGhhc2VUaW1lcygpKQotICAgICAgICBkYXRhTG9nKCJE
RkcoUGxhbikgY29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIiwg
aW5zdHJ1Y3Rpb25zIHNpemUgPSAiLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpLCAi
XG4iKTsKLQotICAgIENvbXBpbGF0aW9uUGF0aCBwYXRoID0gY29tcGlsZUluVGhyZWFkSW1wbCgp
OwotCi0gICAgUkVMRUFTRV9BU1NFUlQocGF0aCA9PSBDYW5jZWxQYXRoIHx8IG1fZmluYWxpemVy
KTsKLSAgICBSRUxFQVNFX0FTU0VSVCgocGF0aCA9PSBDYW5jZWxQYXRoKSA9PSAobV9zdGFnZSA9
PSBDYW5jZWxsZWQpKTsKKyAgICBKSVRQbGFuOjpub3RpZnlSZWFkeSgpOworICAgIG1fY2FsbGJh
Y2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShtX2NvZGVCbG9jaywg
bV9wcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CiAKLSAgICBNb25vdG9uaWNUaW1lIGFmdGVyIHsg
fTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkgewotICAgICAgICBh
ZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
cmVwb3J0VG90YWxDb21waWxlVGltZXMoKSkgewotICAgICAgICAgICAgaWYgKGlzRlRMKCkpIHsK
LSAgICAgICAgICAgICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwot
ICAgICAgICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRM
IC0gYmVmb3JlOwotICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRl
ciAtIG1fdGltZUJlZm9yZUZUTDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IHRvdGFsREZHQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29uc3QgY2hhciogcGF0aE5hbWUgPSBudWxscHRyOwotICAgIHN3aXRjaCAocGF0aCkg
ewotICAgIGNhc2UgRmFpbFBhdGg6Ci0gICAgICAgIHBhdGhOYW1lID0gIk4vQSAoZmFpbCkiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIERGR1BhdGg6Ci0gICAgICAgIHBhdGhOYW1lID0gIkRG
RyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRlRMUGF0aDoKLSAgICAgICAgcGF0aE5hbWUg
PSAiRlRMIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYW5jZWxQYXRoOgotICAgICAgICBw
YXRoTmFtZSA9ICJDYW5jZWxsZWQiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgaWYgKG1fY29kZUJsb2NrKSB7IC8vIG1fY29kZUJsb2NrIHdpbGwgYmUgbnVsbCBpZiB0
aGUgY29tcGlsYXRpb24gd2FzIGNhbmNlbGxlZC4KLSAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0
aCkKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJmdGxDb21w
aWxlIiwgKCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERG
RzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAi
LCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBh
dGhOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZmdDb21waWxlIiwgKCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWls
bGlzZWNvbmRzKCksICIgbXMgd2l0aCAiLCBwYXRoTmFtZSkpOwotICAgIH0KLSAgICBpZiAoVU5M
SUtFTFkocmVwb3J0Q29tcGlsZVRpbWVzKCkpKSB7Ci0gICAgICAgIGRhdGFMb2coIk9wdGltaXpl
ZCAiLCBjb2RlQmxvY2tOYW1lLCAiIHVzaW5nICIsIG1fbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1l
LCAiIGludG8gIiwgbV9maW5hbGl6ZXIgPyBtX2ZpbmFsaXplci0+Y29kZVNpemUoKSA6IDAsICIg
Ynl0ZXMgaW4gIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcyIpOwotICAg
ICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQotICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIs
IChtX3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiLCBCMzogIiwgKGFm
dGVyIC0gbV90aW1lQmVmb3JlRlRMKS5taWxsaXNlY29uZHMoKSwgIikiKTsKLSAgICAgICAgZGF0
YUxvZygiLlxuIik7Ci0gICAgfQordm9pZCBQbGFuOjpjYW5jZWwoKQoreworICAgIEpJVFBsYW46
OmNhbmNlbCgpOworICAgIG1fcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBudWxscHRyOworICAgIG1f
bXVzdEhhbmRsZVZhbHVlcy5jbGVhcigpOworICAgIG1fY29tcGlsYXRpb24gPSBudWxscHRyOwor
ICAgIG1fZmluYWxpemVyID0gbnVsbHB0cjsKKyAgICBtX2lubGluZUNhbGxGcmFtZXMgPSBudWxs
cHRyOworICAgIG1fd2F0Y2hwb2ludHMgPSBEZXNpcmVkV2F0Y2hwb2ludHMoKTsKKyAgICBtX2lk
ZW50aWZpZXJzID0gRGVzaXJlZElkZW50aWZpZXJzKCk7CisgICAgbV93ZWFrUmVmZXJlbmNlcyA9
IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOworICAgIG1fdHJhbnNpdGlvbnMgPSBEZXNpcmVkVHJh
bnNpdGlvbnMoKTsKKyAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsKIH0KIAogUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQpAQCAtMzAwLDcgKzI0Myw3IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkKICAgICAK
ICAgICBSVU5fUEhBU0UocGVyZm9ybVN0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvbik7CiAK
LSAgICBpZiAobV9tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAgIGlmIChtX21vZGUg
PT0gSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeSkgewogICAgICAgICBib29sIHJl
c3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgICAgIG1fZmluYWxpemVyID0gbWFrZVVuaXF1ZTxGYWlsZWRGaW5h
bGl6ZXI+KCp0aGlzKTsKQEAgLTM3Niw3ICszMTksNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGgg
UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCgpCiAgICAgfQogCiAgICAgc3dpdGNoIChtX21vZGUp
IHsKLSAgICBjYXNlIERGR01vZGU6IHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6REZH
OiB7CiAgICAgICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKIAog
ICAgICAgICBSVU5fUEhBU0UocGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKTsKQEAgLTQwNSw4
ICszNDgsOCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCgpCiAgICAgICAgIHJldHVybiBERkdQYXRoOwogICAgIH0KICAgICAKLSAgICBjYXNlIEZUTE1v
ZGU6Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICBjYXNlIEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRy
eTogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgICAgICBpZiAoRlRMOjpjYW5Db21waWxlKGRm
ZykgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7CiAgICAgICAgICAgICBtX2ZpbmFsaXplciA9IG1h
a2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CkBAIC01ODEsMjMgKzUyNCwxMiBAQCB2
b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25EYXRhKQogICAgIH0KIH0KIAot
dm9pZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQotewotICAgIG1fc3RhZ2UgPSBDb21waWxpbmc7
Ci19Ci0KLXZvaWQgUGxhbjo6bm90aWZ5UmVhZHkoKQotewotICAgIG1fY2FsbGJhY2stPmNvbXBp
bGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShtX2NvZGVCbG9jaywgbV9wcm9maWxl
ZERGR0NvZGVCbG9jayk7Ci0gICAgbV9zdGFnZSA9IFJlYWR5OwotfQotCiBib29sIFBsYW46Omlz
U3RpbGxWYWxpZE9uTWFpblRocmVhZCgpCiB7CiAgICAgcmV0dXJuIG1fd2F0Y2hwb2ludHMuYXJl
U3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7CiB9CiAKLUNvbXBp
bGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKK0Nv
bXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKCkKIHsKICAgICAvLyBXZSBwZXJmb3JtIG11
bHRpcGxlIHN0b3JlcyBiZWZvcmUgZW1pdHRpbmcgYSB3cml0ZS1iYXJyaWVyLiBUbyBlbnN1cmUg
dGhhdCBubyBHQyBoYXBwZW5zIGJldHdlZW4gc3RvcmUgYW5kIHdyaXRlLWJhcnJpZXIsIHdlIHNo
b3VsZCBlbnN1cmUgdGhhdAogICAgIC8vIEdDIGlzIGRlZmVycmVkIHdoZW4gdGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQuCkBAIC02NTksMjQgKzU5MSwzMCBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFu
OjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCiAKICAgICAvLyBXZSB3aWxsIGVz
dGFibGlzaCBuZXcgcmVmZXJlbmNlcyBmcm9tIHRoZSBjb2RlIGJsb2NrIHRvIHRoaW5ncy4gU28s
IHdlIG5lZWQgYSBiYXJyaWVyLgogICAgIG1fdm0tPmhlYXAud3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrKTsKKworICAgIG1fY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUobV9jb2RlQmxv
Y2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CisKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIFBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKQorYm9vbCBQbGFu
OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFNo
YXJlZFRhc2s8dm9pZChDb2RlQmxvY2sqKT4mIGZ1bmMpCiB7Ci0gICAgbV9jYWxsYmFjay0+Y29t
cGlsYXRpb25EaWRDb21wbGV0ZShtX2NvZGVCbG9jaywgbV9wcm9maWxlZERGR0NvZGVCbG9jaywg
ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKSk7Ci19CisgICAgaWYgKCFKSVRQbGFu
OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLUNvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCi17Ci0gICAgcmV0dXJuIENvbXBp
bGF0aW9uS2V5KG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtX21vZGUpOworICAgIC8vIENv
bXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBl
cmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBw
ZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKKyAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVz
dCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKyAgICBmdW5jLnJ1bihtX2NvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CisgICAgaWYgKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIGZ1bmMu
cnVuKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghaXNL
bm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
IUpJVFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTsp
IHsKQEAgLTY4OCw3ICs2MjYsNiBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENo
aWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgbV9yZWNvcmRlZFN0YXR1c2VzLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwogICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2spOwogICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwog
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9wcm9maWxlZERGR0NvZGVCbG9jayk7CiAK
QEAgLTcwMSwyMyArNjM4LDEyIEBAIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIAogICAgIG1fd2Vha1JlZmVyZW5jZXMudmlzaXRDaGls
ZHJlbih2aXNpdG9yKTsKICAgICBtX3RyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBQ
bGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi12b2lk
IFBsYW46OmZpbmFsaXplSW5HQygpCi17Ci0gICAgQVNTRVJUKG1fdm0pOwotICAgIG1fcmVjb3Jk
ZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92bSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFZpc2l0b3I+Ci1ib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZp
c2l0b3ImIHZpc2l0b3IpCitib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1fc3RhZ2UgPT0gQ2FuY2VsbGVk
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCFKSVRQbGFuOjppc0tub3duVG9C
ZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
dmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTcyNiwxNCArNjUyLDkgQEAgYm9vbCBQbGFuOjppc0tub3duVG9CZUxp
dmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0
b3ImKTsKLXRlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZp
c2l0b3ImKTsKLQogYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKIHsKLSAgICBp
ZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAg
ICBpZiAoIUpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbV92bS0+aGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc0MiwyNiArNjYzLDYgQEAgYm9v
bCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBQbGFuOjpjYW5jZWwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhZ2UgIT0gQ2Fu
Y2VsbGVkKTsKLSAgICBBU1NFUlQobV92bSk7Ci0gICAgbV92bSA9IG51bGxwdHI7Ci0KLSAgICBt
X2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9wcm9maWxlZERGR0NvZGVCbG9jayA9IG51bGxw
dHI7Ci0gICAgbV9tdXN0SGFuZGxlVmFsdWVzLmNsZWFyKCk7Ci0gICAgbV9jb21waWxhdGlvbiA9
IG51bGxwdHI7Ci0gICAgbV9maW5hbGl6ZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQ2FsbEZy
YW1lcyA9IG51bGxwdHI7Ci0gICAgbV93YXRjaHBvaW50cyA9IERlc2lyZWRXYXRjaHBvaW50cygp
OwotICAgIG1faWRlbnRpZmllcnMgPSBEZXNpcmVkSWRlbnRpZmllcnMoKTsKLSAgICBtX3dlYWtS
ZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgbV90cmFuc2l0aW9ucyA9
IERlc2lyZWRUcmFuc2l0aW9ucygpOwotICAgIG1fY2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1f
c3RhZ2UgPSBDYW5jZWxsZWQ7Ci19Ci0KIHZvaWQgUGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVz
SWZOZWNlc3NhcnkoKQogewogICAgIExvY2tlciBsb2NrZXIgeyBtX211c3RIYW5kbGVWYWx1ZUNs
ZWFuaW5nTG9jayB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAppbmRleCBkZmM3OTY2
ZTA2OWI0NTM0YTUzMjkwNjMyOTMxNGYyNjE5YWIyZDY4Li4wMTE2NTM1MDU1YTM5MmQyMGEzNWQ5
ODdiZDJmZmM2MjA3OGNkMzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApAQCAt
MjYsOCArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3Vs
dC5oIgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uS2V5LmgiCi0jaW5jbHVkZSAiREZHQ29tcGls
YXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMuaCIKICNp
bmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaCIKQEAgLTM1LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXMuaCIKICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJKSVRQbGFuLmgiCiAjaW5jbHVkZSAi
T3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
UmVjb3JkZWRTdGF0dXNlcy5oIgpAQCAtNTIsNDUgKzUxLDMzIEBAIGNsYXNzIFRocmVhZERhdGE7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxQbGFuPiB7CitjbGFzcyBQbGFuIGZpbmFsIDogcHVibGljIEpJVFBsYW4gewog
cHVibGljOgogICAgIFBsYW4oCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrVG9Db21waWxl
LCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAotICAgICAgICBDb21waWxhdGlvbk1v
ZGUsIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgICAgICBKSVRDb21w
aWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LAogICAgICAg
ICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMpOwog
ICAgIH5QbGFuKCk7CiAKLSAgICB2b2lkIGNvbXBpbGVJblRocmVhZChUaHJlYWREYXRhKik7Ci0g
ICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJh
Y2soKTsKLSAgICB2b2lkIGZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKLSAgICAKLSAgICB2
b2lkIG5vdGlmeUNvbXBpbGluZygpOwotICAgIHZvaWQgbm90aWZ5UmVhZHkoKTsKLSAgICAKLSAg
ICBDb21waWxhdGlvbktleSBrZXkoKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
LCB0eXBlbmFtZSBWaXNpdG9yPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNp
dG9yJiwgY29uc3QgRnVuYyYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+IHZvaWQg
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlzaXRvciYpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+IGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYpOwot
ICAgIGJvb2wgaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpOwotICAgIHZvaWQgZmluYWxpemVJbkdD
KCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKKyAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGZpbmFsaXplSW5HQygpIGZpbmFsOworICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGNhblRpZXJVcEFuZE9TUkVudGVyKCkg
Y29uc3QgeyByZXR1cm4gIW1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMuaXNFbXB0eSgpOyB9
CisgICAgdm9pZCBub3RpZnlSZWFkeSgpIGZpbmFsOworICAgIHZvaWQgY2FuY2VsKCkgZmluYWw7
CisKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSBmaW5hbDsKKyAgICBib29sIGlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICBi
b29sIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYsIFNoYXJlZFRh
c2s8dm9pZChDb2RlQmxvY2sqKT4mKSBmaW5hbDsKKyAgICBib29sIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIHZvaWQgY2xl
YW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIFZNKiB2bSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm07IH0KKyAgICBib29sIGNhblRpZXJVcEFuZE9TUkVudGVyKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMuaXNFbXB0eSgpOyB9CiAKLSAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAgdm9pZCBj
bGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgYm9vbCBpc0ZUTCgpIGNv
bnN0IHsgcmV0dXJuIERGRzo6aXNGVEwobV9tb2RlKTsgfQotICAgIENvbXBpbGF0aW9uTW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsg
fQogICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fbXVzdEhhbmRsZVZhbHVlczsgfQotICAgIFRocmVhZERhdGEq
IHRocmVhZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZERhdGE7IH0KICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlv
bi5nZXQoKTsgfQogCiAgICAgRmluYWxpemVyKiBmaW5hbGl6ZXIoKSBjb25zdCB7IHJldHVybiBt
X2ZpbmFsaXplci5nZXQoKTsgfQpAQCAtMTA5LDMyICs5NiwxNyBAQCBwdWJsaWM6CiAgICAgSGFz
aE1hcDxCeXRlY29kZUluZGV4LCBGaXhlZFZlY3RvcjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcElu
TG9vcEhpZXJhcmNoeSgpIHsgcmV0dXJuIG1fdGllclVwSW5Mb29wSGllcmFyY2h5OyB9CiAgICAg
VmVjdG9yPEJ5dGVjb2RlSW5kZXg+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0
dXJuIG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KIAotICAgIGVudW0gU3RhZ2UgeyBQ
cmVwYXJpbmcsIENvbXBpbGluZywgUmVhZHksIENhbmNlbGxlZCB9OwotICAgIFN0YWdlIHN0YWdl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFnZTsgfQotCiAgICAgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2suZ2V0KCk7IH0KICAg
ICB2b2lkIHNldENhbGxiYWNrKFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAKIHByaXZhdGU6Ci0g
ICAgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZXBvcnRDb21w
aWxlVGltZXMoKSBjb25zdDsKLSAgICAKLSAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQ
YXRoLCBERkdQYXRoLCBGVExQYXRoLCBDYW5jZWxQYXRoIH07Ci0gICAgQ29tcGlsYXRpb25QYXRo
IGNvbXBpbGVJblRocmVhZEltcGwoKTsKKyAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhy
ZWFkSW1wbCgpIG92ZXJyaWRlOwogICAgIAogICAgIGJvb2wgaXNTdGlsbFZhbGlkT25NYWluVGhy
ZWFkKCk7CiAgICAgYm9vbCBpc1N0aWxsVmFsaWQoKTsKICAgICB2b2lkIHJlYWxseUFkZChDb21t
b25EYXRhKik7CiAKLSAgICAvLyBXYXJuaW5nOiBwcmV0dHkgbXVjaCBhbGwgb2YgdGhlIHBvaW50
ZXIgZmllbGRzIGluIHRoaXMgb2JqZWN0IGdldCBudWxsZWQgYnkgY2FuY2VsKCkuIFNvLCBpZgot
ICAgIC8vIHlvdSdyZSB3cml0aW5nIGNvZGUgdGhhdCBpcyBjYWxsYWJsZSBvbiB0aGUgY2FuY2Vs
IHBhdGgsIGJlIHN1cmUgdG8gbnVsbCBjaGVjayBldmVyeXRoaW5nIQotCi0gICAgQ29tcGlsYXRp
b25Nb2RlIG1fbW9kZTsKLQotICAgIFZNKiBtX3ZtOwotCiAgICAgLy8gVGhlc2UgY2FuIGJlIHJh
dyBwb2ludGVycyBiZWNhdXNlIHdlIHZpc2l0IHRoZW0gZHVyaW5nIGV2ZXJ5IEdDIGluIGNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuLgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAg
ICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrOwogCiAgICAgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+IG1fbXVzdEhhbmRsZVZhbHVlczsKQEAgLTE0NSw4ICsxMTcsNiBAQCBw
cml2YXRlOgogCiAgICAgY29uc3QgQnl0ZWNvZGVJbmRleCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eDsKIAotICAgIFRocmVhZERhdGEqIG1fdGhyZWFkRGF0YTsKLQogICAgIFJlZlB0cjxQcm9maWxl
cjo6Q29tcGlsYXRpb24+IG1fY29tcGlsYXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmlu
YWxpemVyPiBtX2ZpbmFsaXplcjsKQEAgLTE2MSwxMSArMTMxLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZpeGVkVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJV
cEluTG9vcEhpZXJhcmNoeTsKICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gbV90aWVyVXBBbmRP
U1JFbnRlckJ5dGVjb2RlczsKIAotICAgIFN0YWdlIG1fc3RhZ2U7Ci0KICAgICBSZWZQdHI8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotCi0gICAgTW9ub3RvbmljVGlt
ZSBtX3RpbWVCZWZvcmVGVEw7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGYyNzg4MmRhYTU5ZjZhYTU4MTcyYTlkMjg3OWJkNzg0M2NmMmY5NzYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuSW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmICghaXNL
bm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0
aG91dCBwZXJmb3JtaW5nCi0gICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQg
dG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0Ci0gICAgLy8gYWxsIG91ciBDb2RlQmxv
Y2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCi0KLSAgICBmdW5jKG1fY29kZUJsb2NrKTsK
LSAgICBmdW5jKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAobV9wcm9maWxl
ZERGR0NvZGVCbG9jaykKLSAgICAgICAgZnVuYyhtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTk0MDcwNjE2M2Q2YTNjYmI2MmQyZjMxYzRiZWZlMTIzYjdm
NjM5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIK
LQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUg
IkRGR1NjYW5uYWJsZS5oIgotI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1TYWZlcG9pbnQ6OlJlc3VsdDo6flJlc3VsdCgpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV93YXNDaGVja2VkKTsKLX0KLQotYm9vbCBTYWZlcG9pbnQ6
OlJlc3VsdDo6ZGlkR2V0Q2FuY2VsbGVkKCkKLXsKLSAgICBtX3dhc0NoZWNrZWQgPSB0cnVlOwot
ICAgIHJldHVybiBtX2RpZEdldENhbmNlbGxlZDsKLX0KLQotU2FmZXBvaW50OjpTYWZlcG9pbnQo
UGxhbiYgcGxhbiwgUmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX3ZtKHBsYW4udm0oKSkKLSAgICAs
IG1fcGxhbihwbGFuKQotICAgICwgbV9kaWRDYWxsQmVnaW4oZmFsc2UpCi0gICAgLCBtX3Jlc3Vs
dChyZXN1bHQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7Ci0g
ICAgcmVzdWx0Lm1fd2FzQ2hlY2tlZCA9IGZhbHNlOwotICAgIHJlc3VsdC5tX2RpZEdldENhbmNl
bGxlZCA9IGZhbHNlOwotfQotCi1TYWZlcG9pbnQ6On5TYWZlcG9pbnQoKQotewotICAgIFJFTEVB
U0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKLSAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1f
cGxhbi50aHJlYWREYXRhKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+bV9zYWZl
cG9pbnQgPT0gdGhpcyk7Ci0gICAgICAgIGRhdGEtPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci0gICAg
ICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgU2FmZXBv
aW50OjphZGQoU2Nhbm5hYmxlKiBzY2FubmFibGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1f
ZGlkQ2FsbEJlZ2luKTsKLSAgICBtX3NjYW5uYWJsZXMuYXBwZW5kKHNjYW5uYWJsZSk7Ci19Ci0K
LXZvaWQgU2FmZXBvaW50OjpiZWdpbigpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2Fs
bEJlZ2luKTsKLSAgICBtX2RpZENhbGxCZWdpbiA9IHRydWU7Ci0gICAgaWYgKFRocmVhZERhdGEq
IGRhdGEgPSBtX3BsYW4udGhyZWFkRGF0YSgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFk
YXRhLT5tX3NhZmVwb2ludCk7Ci0gICAgICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gdGhpczsKLSAg
ICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLnVubG9ja0ZhaXJseSgpOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZGlkQ2FsbEJlZ2luKTsKLQotICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKLSAg
ICAgICAgcmV0dXJuOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEK
LSAgICAKLSAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUo
KTsgaS0tOykKLSAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwotfQotCi10ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Ci1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7
Ci0gICAgCi0gICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQotICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxl
dCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZl
IGFuZCBtb3ZlIG9uLgotICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVy
aW5nR0ModmlzaXRvcik7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9C
ZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSBib29sIFNhZmVw
b2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBTYWZl
cG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZGlkQ2FsbEJlZ2luKTsKLSAgICAKLSAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQp
Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2
aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJl
dGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCi0gICAgCi0gICAgcmV0dXJuIG1fcGxhbi5pc0tu
b3duVG9CZUxpdmVBZnRlckdDKCk7Ci19Ci0KLXZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpOyAvLyBXZSBjYW5ub3QgZ2V0IGNhbmNlbGxlZCB0
d2ljZSBiZWNhdXNlIHN1YnNlcXVlbnQgR0NzIHdpbGwgdGhpbmsgdGhhdCB3ZSdyZSBhbGl2ZSBh
bmQgdGhleSB3aWxsIG5vdCBkbyBhbnl0aGluZyB0byB1cy4KLSAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVChtX3BsYW4uc3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwotICAgIG1fcmVzdWx0Lm1f
ZGlkR2V0Q2FuY2VsbGVkID0gdHJ1ZTsKLSAgICBtX3ZtID0gbnVsbHB0cjsKLX0KLQotVk0qIFNh
ZmVwb2ludDo6dm0oKSBjb25zdAotewotICAgIHJldHVybiBtX3ZtOwotfQotCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFkMzk4MTY0OTg5ZGExYWQwYjU3OTZjNjk5ZTFjOGNjZjNhYzZkMjUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlcG9pbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVk07Ci0KLW5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBQ
bGFuOwotY2xhc3MgU2Nhbm5hYmxlOwotCi1jbGFzcyBTYWZlcG9pbnQgewotcHVibGljOgotICAg
IGNsYXNzIFJlc3VsdCB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXN1bHQoKQotICAgICAgICAg
ICAgOiBtX2RpZEdldENhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV93YXNDaGVja2Vk
KHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgflJlc3VsdCgp
OwotICAgICAgICAKLSAgICAgICAgYm9vbCBkaWRHZXRDYW5jZWxsZWQoKTsKLSAgICAgICAgCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgbV9kaWRHZXRDYW5jZWxsZWQ7Ci0gICAgICAgIGJvb2wgbV93YXNDaGVja2Vk
OwotICAgIH07Ci0gICAgCi0gICAgU2FmZXBvaW50KFBsYW4mLCBSZXN1bHQmKTsKLSAgICB+U2Fm
ZXBvaW50KCk7Ci0gICAgCi0gICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7Ci0gICAgCi0gICAgdm9p
ZCBiZWdpbigpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7Ci0gICAgYm9v
bCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICAKLSAg
ICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2Vs
bGVkLgotCi1wcml2YXRlOgotICAgIFZNKiBtX3ZtOwotICAgIFBsYW4mIG1fcGxhbjsKLSAgICBW
ZWN0b3I8U2Nhbm5hYmxlKj4gbV9zY2FubmFibGVzOwotICAgIGJvb2wgbV9kaWRDYWxsQmVnaW47
Ci0gICAgUmVzdWx0JiBtX3Jlc3VsdDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
LQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2Nhbm5hYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTA3MmI1YjU4ZmJm
NDAzMjcwNDRjZWE3NTY1M2JlZDI0OTc2MDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShE
RkdfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsK
LWNsYXNzIFNsb3RWaXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgU2Nhbm5hYmxl
IHsKLXB1YmxpYzoKLSAgICBTY2FubmFibGUoKSB7IH0KLSAgICB2aXJ0dWFsIH5TY2FubmFibGUo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0
b3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9
IDA7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFk
RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjAzMmViN2UzYzg5NzIzNTI2NWE5M2JjYjMz
YzlkYjg5NjI3MDEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdUaHJlYWREYXRh
LmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewotCi1UaHJlYWREYXRhOjpUaHJlYWREYXRhKFdvcmtsaXN0KiB3b3JrbGlzdCkKLSAgICA6
IG1fd29ya2xpc3Qod29ya2xpc3QpCi0gICAgLCBtX3NhZmVwb2ludChudWxscHRyKQotewotfQot
Ci1UaHJlYWREYXRhOjp+VGhyZWFkRGF0YSgpCi17Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGhyZWFkRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJi
N2QyYjdjMzYxZThiOWQzODBjNzI4Y2ZiOGEwNWIxNzQ2OWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGhyZWFkRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1jbGFzcyBTYWZlcG9pbnQ7Ci1jbGFzcyBXb3JrbGlzdDsKLQotY2xhc3MgVGhyZWFkRGF0YSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkRGF0YShX
b3JrbGlzdCopOwotICAgIH5UaHJlYWREYXRhKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBTYWZlcG9pbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtsaXN0OwotICAgIAotICAg
IFdvcmtsaXN0KiBtX3dvcmtsaXN0OwotICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhy
ZWFkOwotICAgIFVuY2hlY2tlZExvY2sgbV9yaWdodFRvUnVuOwotICAgIFNhZmVwb2ludCogbV9z
YWZlcG9pbnQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IGIzYTMwMzgxNGJhOTY1NTFj
YmFhZmY3ZjVhMjMwMjI4YzkxMjc0YTkuLjhmZDAyZjNiZDM5NDE5ZTgzM2UyN2FhOWExOTc2NTc4
NDQ5ZTdhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9wbGFuLm1vZGUoKSA9PSBERkdNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKTsKIAogICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDE1N2FkZjg3NmRjODQ2ODNhODZjMDQ2ZWEyYmVlY2JhYjk5YTkz
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCi0KLSNp
bmNsdWRlICJERkdTYWZlcG9pbnQuaCIKLSNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKLSNp
bmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLWNs
YXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7
Ci1wdWJsaWM6Ci0gICAgVGhyZWFkQm9keShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBX
b3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxVbmNoZWNrZWRMb2NrPiBs
b2NrLCBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiYmIGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCi0gICAgICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwgbG9jaywgV1RG
TW92ZShjb25kaXRpb24pLCBUaHJlYWRUeXBlOjpDb21waWxlcikKLSAgICAgICAgLCBtX3dvcmts
aXN0KHdvcmtsaXN0KQotICAgICAgICAsIG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fcmVsYXRp
dmVQcmlvcml0eShyZWxhdGl2ZVByaW9yaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBj
aGFyKiBuYW1lKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dvcmtsaXN0
Lm1fdGhyZWFkTmFtZS5kYXRhKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBvbGxSZXN1bHQg
cG9sbChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKSBmaW5hbAotICAgIHsKLSAgICAgICAg
aWYgKG1fd29ya2xpc3QubV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gUG9s
bFJlc3VsdDo6V2FpdDsKLSAgICAgICAgCi0gICAgICAgIG1fcGxhbiA9IG1fd29ya2xpc3QubV9x
dWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgaWYgKCFtX3BsYW4pIHsKLSAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
bV93b3JrbGlzdC5kdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCI6IFRocmVhZCBzaHV0dGluZyBkb3duXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOwotICAgICAgICB9Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpQcmVwYXJpbmcpOwotICAgICAg
ICBtX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7Ci0gICAgICAgIHJldHVybiBQ
b2xsUmVzdWx0OjpXb3JrOwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBXb3JrU2NvcGU7Ci0gICAg
ZnJpZW5kIGNsYXNzIFdvcmtTY29wZTsKLSAgICBjbGFzcyBXb3JrU2NvcGUgZmluYWwgewotICAg
IHB1YmxpYzoKLSAgICAgICAgV29ya1Njb3BlKFRocmVhZEJvZHkmIHRocmVhZCkKLSAgICAgICAg
ICAgIDogbV90aHJlYWQodGhyZWFkKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3RocmVhZC5tX3BsYW4pOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90aHJl
YWQubV93b3JrbGlzdC5tX251bWJlck9mQWN0aXZlVGhyZWFkcyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIH5Xb3JrU2NvcGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fdGhyZWFkLm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgICAgICBtX3Ro
cmVhZC5tX3BsYW4gPSBudWxscHRyOwotICAgICAgICAgICAgbV90aHJlYWQubV93b3JrbGlzdC5t
X251bWJlck9mQWN0aXZlVGhyZWFkcy0tOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZh
dGU6Ci0gICAgICAgIFRocmVhZEJvZHkmIG1fdGhyZWFkOwotICAgIH07Ci0gICAgCi0gICAgV29y
a1Jlc3VsdCB3b3JrKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIFdvcmtTY29wZSB3b3JrU2NvcGUo
KnRoaXMpOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2RhdGEubV9yaWdodFRvUnVuIH07
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV93b3JrbGlzdC5tX2xv
Y2sgfTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVk
KQotICAgICAgICAgICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAg
ICAgIG1fcGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksIG1fd29y
a2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5Iik7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNh
ZmVwb2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+
dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJIZWFw
IGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3BsYW4tPmNvbXBp
bGVJblRocmVhZCgmbV9kYXRhKTsKLSAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSAhPSBQbGFu
OjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJ
c1N0b3BwZWQoKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBi
dXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgewotICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9Owot
ICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgbV93b3JrbGlzdC5kdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCI6IENvbXBpbGVkICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9u
b3VzbHlcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9wbGFuLT52bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwotICAgICAg
ICAgICAgbV93b3JrbGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7Ci0g
ICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgdGhyZWFkRGlkU3RhcnQoKSBmaW5hbAotICAgIHsKLSAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlz
dCwgIjogVGhyZWFkIHN0YXJ0ZWQiKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3JlbGF0aXZl
UHJpb3JpdHkpCi0gICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5jaGFuZ2VQcmlvcml0eSht
X3JlbGF0aXZlUHJpb3JpdHkpOwotICAgICAgICAKLSAgICAgICAgbV9jb21waWxhdGlvblNjb3Bl
ID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvblNjb3BlPigpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHRocmVhZElzU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbAotICAgIHsKLSAg
ICAgICAgLy8gV2UncmUgaG9sZGluZyB0aGUgV29ya2xpc3Q6Om1fbG9jaywgc28gd2Ugc2hvdWxk
IGJlIGNhcmVmdWwgbm90IHRvIGRlYWRsb2NrLgotICAgICAgICAKLSAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhy
ZWFkIHdpbGwgc3RvcCIpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFtX3BsYW4pOwotICAg
ICAgICAKLSAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gbnVsbHB0cjsKLSAgICAgICAgbV9w
bGFuID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBXb3JrbGlzdCYgbV93b3JrbGlzdDsKLSAgICBU
aHJlYWREYXRhJiBtX2RhdGE7Ci0gICAgaW50IG1fcmVsYXRpdmVQcmlvcml0eTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb25TY29wZT4gbV9jb21waWxhdGlvblNjb3BlOwotICAgIFJl
ZlB0cjxQbGFuPiBtX3BsYW47Ci19OwotCi1zdGF0aWMgQ1N0cmluZyBjcmVhdGVXb3JrbGlzdE5h
bWUoQ1N0cmluZyYmIHRpZXJOYW1lKQotewotI2lmIE9TKExJTlVYKQotICAgIHJldHVybiB0b0NT
dHJpbmcoV1RGTW92ZSh0aWVyTmFtZSksICJXb3JrZXIiKTsKLSNlbHNlCi0gICAgcmV0dXJuIHRv
Q1N0cmluZyhXVEZNb3ZlKHRpZXJOYW1lKSwgIiBXb3JrbGlzdCBXb3JrZXIgVGhyZWFkIik7Ci0j
ZW5kaWYKLX0KLQotV29ya2xpc3Q6OldvcmtsaXN0KENTdHJpbmcmJiB0aWVyTmFtZSkKLSAgICA6
IG1fdGhyZWFkTmFtZShjcmVhdGVXb3JrbGlzdE5hbWUoV1RGTW92ZSh0aWVyTmFtZSkpKQotICAg
ICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKLSAg
ICAsIG1fbG9jayhCb3g8VW5jaGVja2VkTG9jaz46OmNyZWF0ZSgpKQotewotfQotCi1Xb3JrbGlz
dDo6fldvcmtsaXN0KCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2Nr
IH07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0g
ICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0byBp
bmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgICAgIG1f
cGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV90aHJlYWRzW2ldLT5tX3Ro
cmVhZC0+am9pbigpOwotICAgIEFTU0VSVCghbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOwotfQot
Ci12b2lkIFdvcmtsaXN0OjpmaW5pc2hDcmVhdGlvbih1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMs
IGludCByZWxhdGl2ZVByaW9yaXR5KQotewotICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVGhy
ZWFkcyk7Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1iZXJPZlRocmVhZHM7IGktLTspIHsKLSAgICAgICAgY3JlYXRlTmV3VGhyZWFkKGxv
Y2tlciwgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpjcmVh
dGVOZXdUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgaW50IHJlbGF0aXZlUHJp
b3JpdHkpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZERhdGE+IGRhdGEgPSBtYWtlVW5p
cXVlPFRocmVhZERhdGE+KHRoaXMpOwotICAgIGRhdGEtPm1fdGhyZWFkID0gYWRvcHRSZWYobmV3
IFRocmVhZEJvZHkobG9ja2VyLCAqdGhpcywgKmRhdGEsIG1fbG9jaywgbV9wbGFuRW5xdWV1ZWQu
Y29weVJlZigpLCByZWxhdGl2ZVByaW9yaXR5KSk7Ci0gICAgbV90aHJlYWRzLmFwcGVuZChXVEZN
b3ZlKGRhdGEpKTsKLX0KLQotUmVmPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3JlYXRlKENTdHJpbmcm
JiB0aWVyTmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQcmlvcml0
eSkKLXsKLSAgICBSZWY8V29ya2xpc3Q+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgV29ya2xpc3Qo
V1RGTW92ZSh0aWVyTmFtZSkpKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKG51bWJlck9m
VGhyZWFkcywgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9v
bCBXb3JrbGlzdDo6aXNBY3RpdmVGb3JWTShWTSYgdm0pIGNvbnN0Ci17Ci0gICAgTG9ja2VyIGxv
Y2tlciB7ICptX2xvY2sgfTsKLSAgICBQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
YW5zLmVuZCgpOwotICAgIGZvciAoUGxhbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGxh
bnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dmFs
dWUtPnZtKCkgPT0gJnZtKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4mJiBwbGFu
KQotewotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0
YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXpl
ICIsIHBsYW4tPmtleSgpLCAiXG4iKTsKLSAgICB9Ci0gICAgQVNTRVJUKG1fcGxhbnMuZmluZChw
bGFuLT5rZXkoKSkgPT0gbV9wbGFucy5lbmQoKSk7Ci0gICAgbV9wbGFucy5hZGQocGxhbi0+a2V5
KCksIHBsYW4uY29weVJlZigpKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsK
LSAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7Ci19Ci0KLVdvcmtsaXN0OjpT
dGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSBrZXkpCi17Ci0g
ICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIE5vdEtub3duOwotICAgIHJldHVybiBpdGVyLT52YWx1ZS0+c3RhZ2UoKSA9
PSBQbGFuOjpSZWFkeSA/IENvbXBpbGVkIDogQ29tcGlsaW5nOwotfQotCi12b2lkIFdvcmtsaXN0
Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mIHZtKQotewotICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAKLSAgICAvLyBXaGlsZSB3ZSBhcmUgd2FpdGluZyBmb3Ig
dGhlIGNvbXBpbGVyIHRvIGZpbmlzaCwgdGhlIGNvbGxlY3RvciBtaWdodCBoYXZlIGFscmVhZHkg
c3VzcGVuZGVkCi0gICAgLy8gdGhlIGNvbXBpbGVyIGFuZCB0aGVuIGl0IHdpbGwgYmUgd2FpdGlu
ZyBmb3IgdXMgdG8gc3RvcC4gVGhhdCdzIGEgZGVhZGxvY2suIFdlIGF2b2lkIHRoYXQKLSAgICAv
LyBkZWFkbG9jayBieSByZWxpbnF1aXNoaW5nIG91ciBoZWFwIGFjY2Vzcywgc28gdGhhdCB0aGUg
Y29sbGVjdG9yIHByZXRlbmRzIHRoYXQgd2UgYXJlIHN0b3BwZWQKLSAgICAvLyBldmVuIGlmIHdl
IGFyZW4ndC4KLSAgICBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlIHJlbGVhc2VIZWFwQWNjZXNzU2Nv
cGUodm0uaGVhcCk7Ci0gICAgCi0gICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3Ig
dGhlIGdpdmVuIFZNIHRvIGNvbXBsZXRlLiBUaGUgaWRlYSBoZXJlCi0gICAgLy8gaXMgdGhhdCB3
ZSB3YW50IGFsbCBvZiB0aGUgY2FsbGVyIFZNJ3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3Qg
Y2FyZQotICAgIC8vIGFib3V0IGFueSBvdGhlciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0
ZW1wdCB0byB3YWl0IG9uIHRob3NlLgotICAgIC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2Nr
LCB3ZSBrbm93IHRoYXQgYWx0aG91Z2ggb3RoZXIgVk1zIG1heSBzdGlsbAotICAgIC8vIGJlIGFk
ZGluZyBwbGFucywgb3VyIFZNIHdpbGwgbm90IGJlLgotICAgIAotICAgIExvY2tlciBsb2NrZXIg
eyAqbV9sb2NrIH07Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1
ZXVlKCkpIHsKLSAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAg
IGRhdGFMb2coIjogV2FpdGluZyBmb3IgYWxsIGluIFZNIHRvIGNvbXBsZXRlLlxuIik7Ci0gICAg
fQotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgYm9vbCBhbGxBcmVDb21waWxlZCA9IHRy
dWU7Ci0gICAgICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7Ci0gICAg
ICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52bSgpICE9ICZ2
bSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT52YWx1
ZS0+c3RhZ2UoKSAhPSBQbGFuOjpSZWFkeSkgewotICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBp
bGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhbGxBcmVDb21waWxlZCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICAgICAgbV9wbGFuQ29tcGlsZWQud2FpdCgqbV9sb2NrKTsK
LSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYg
dm0sIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCi17Ci0gICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07Ci0gICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocGxhbi0+
c3RhZ2UoKSAhPSBQbGFuOjpSZWFkeSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBt
eVJlYWR5UGxhbnMuYXBwZW5kKHBsYW4pOwotICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1f
cmVhZHlQbGFucy5sYXN0KCk7Ci0gICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7Ci0g
ICAgICAgIG1fcGxhbnMucmVtb3ZlKHBsYW4tPmtleSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29y
a2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0pCi17Ci0gICAgVmVjdG9yPFJl
ZlB0cjxQbGFuPiwgOD4gbXlSZWFkeVBsYW5zOwotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JW
TSh2bSwgbXlSZWFkeVBsYW5zKTsKLX0KLQotV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIENvbXBpbGF0aW9uS2V5IHJlcXVlc3RlZEtl
eSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxQ
bGFuPiwgOD4gbXlSZWFkeVBsYW5zOwotICAgIAotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JW
TSh2bSwgbXlSZWFkeVBsYW5zKTsKLSAgICAKLSAgICBTdGF0ZSByZXN1bHRpbmdTdGF0ZSA9IE5v
dEtub3duOwotCi0gICAgd2hpbGUgKCFteVJlYWR5UGxhbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gbXlSZWFkeVBsYW5zLnRha2VMYXN0KCk7Ci0gICAgICAgIENv
bXBpbGF0aW9uS2V5IGN1cnJlbnRLZXkgPSBwbGFuLT5rZXkoKTsKLSAgICAgICAgCi0gICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksICp0aGlzLCAi
OiBDb21wbGV0aW5nICIsIGN1cnJlbnRLZXkpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBs
YW4tPnN0YWdlKCkgPT0gUGxhbjo6UmVhZHkpOwotCi0gICAgICAgIHBsYW4tPmZpbmFsaXplQW5k
Tm90aWZ5Q2FsbGJhY2soKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50S2V5ID09IHJl
cXVlc3RlZEtleSkKLSAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29tcGlsZWQ7Ci0gICAg
fQotICAgIAotICAgIGlmICghIXJlcXVlc3RlZEtleSAmJiByZXN1bHRpbmdTdGF0ZSA9PSBOb3RL
bm93bikgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBpZiAo
bV9wbGFucy5jb250YWlucyhyZXF1ZXN0ZWRLZXkpKQotICAgICAgICAgICAgcmVzdWx0aW5nU3Rh
dGUgPSBDb21waWxpbmc7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHRpbmdTdGF0ZTsK
LX0KLQotdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFy
ZVJlYWR5KHZtKTsKLSAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7Ci19Ci0KLXZv
aWQgV29ya2xpc3Q6OnN1c3BlbmRBbGxUaHJlYWRzKCkKLXsKLSAgICBtX3N1c3BlbnNpb25Mb2Nr
LmxvY2soKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQot
ICAgICAgICBtX3RocmVhZHNbaV0tPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci19Ci0KLXZvaWQgV29y
a2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhy
ZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLnVu
bG9jaygpOwotICAgIG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwotICAg
IHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OwotICAgICAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gdm0pCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBwbGFuLT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVk
IGxvY2tpbmcgYmVjYXVzZToKLSAgICAvLyAoMSkgbm8gbmV3IHRocmVhZHMgY2FuIGJlIGFkZGVk
IHRvIG1fdGhyZWFkcy4gSGVuY2UsIGl0IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3Mu
Ci0gICAgLy8gKDIpIFRocmVhZERhdGE6Om1fc2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0
IHRocmVhZCdzIG1fcmlnaHRUb1J1biB3aGljaCB3ZSBtdXN0IGJlCi0gICAgLy8gICAgIGhvbGRp
bmcgaGVyZSBiZWNhdXNlIG9mIGEgcHJpb3IgY2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgot
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
VGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKLSAgICAgICAgU2FmZXBvaW50
KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAgICAgaWYgKHNhZmVwb2ludCAm
JiBzYWZlcG9pbnQtPnZtKCkgPT0gdm0pCi0gICAgICAgICAgICBzYWZlcG9pbnQtPmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgdm9p
ZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10
ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7
Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCi17Ci0gICAgewotICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBIYXNoU2V0PENvbXBpbGF0
aW9uS2V5PiBkZWFkUGxhbktleXM7Ci0gICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGlm
IChwbGFuLT52bSgpICE9ICZ2bSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChwbGFuLT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKLSAgICAgICAgICAgICAg
ICBwbGFuLT5maW5hbGl6ZUluR0MoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkgIT0gUGxh
bjo6Q2FuY2VsbGVkKTsgLy8gU2hvdWxkIG5vdCBiZSBjYW5jZWxsZWQsIHlldC4KLSAgICAgICAg
ICAgIEFTU0VSVCghZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSk7Ci0gICAgICAg
ICAgICBkZWFkUGxhbktleXMuYWRkKHBsYW4tPmtleSgpKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIWRlYWRQbGFuS2V5cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoSGFzaFNldDxD
b21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRl
ciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3BsYW5z
LnRha2UoKml0ZXIpLT5jYW5jZWwoKTsKLSAgICAgICAgICAgIERlcXVlPFJlZlB0cjxQbGFuPj4g
bmV3UXVldWU7Ci0gICAgICAgICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotICAg
ICAgICAgICAgICAgIGlmIChwbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAg
ICAgICAgICAgICAgICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9xdWV1ZS5zd2FwKG5ld1F1ZXVlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9yZWFkeVBsYW5zW2ldLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVBsYW5zW2kt
LV0gPSBtX3JlYWR5UGxhbnMubGFzdCgpOwotICAgICAgICAgICAgICAgIG1fcmVhZHlQbGFucy5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ly8gTm8gbG9ja2luZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2VlIGNvbW1lbnQgaW4gdmlzaXRX
ZWFrUmVmZXJlbmNlcygpLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgVGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsK
LSAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAg
ICAgaWYgKCFzYWZlcG9pbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNh
ZmVwb2ludC0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmts
aXN0OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fbG9jayB9OwotICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFu
S2V5czsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYW4+PiBkZWFkUGxhbnM7Ci0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IG1fcGxhbnMpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q29tcGlsaW5nKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOwot
ICAgICAgICBkZWFkUGxhbnMuYXBwZW5kKHBsYW4pOwotICAgIH0KLSAgICBmb3IgKENvbXBpbGF0
aW9uS2V5IGtleSA6IGRlYWRQbGFuS2V5cykKLSAgICAgICAgbV9wbGFucy5yZW1vdmUoa2V5KTsK
LSAgICBEZXF1ZTxSZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwotICAgIHdoaWxlICghbV9xdWV1ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJz
dCgpOwotICAgICAgICBpZiAoIWRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpCi0g
ICAgICAgICAgICBuZXdRdWV1ZS5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQotICAgIG1f
cXVldWUgPSBXVEZNb3ZlKG5ld1F1ZXVlKTsKLSAgICBtX3JlYWR5UGxhbnMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSAtPiBib29sIHsKLSAgICAg
ICAgICAgIHJldHVybiBkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpOwotICAgICAg
ICB9KTsKLSAgICBmb3IgKGF1dG8mIHBsYW4gOiBkZWFkUGxhbnMpCi0gICAgICAgIHBsYW4tPmNh
bmNlbCgpOwotfQotCi1zaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKLXsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKLX0KLQot
dm9pZCBXb3JrbGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIExvY2tl
ciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgZHVtcChsb2NrZXIsIG91dCk7Ci19Ci0KLXZvaWQg
V29ya2xpc3Q6OmR1bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotewotICAgIG91dC5wcmludCgKLSAgICAgICAgIldvcmtsaXN0KCIsIFJhd1BvaW50ZXIo
dGhpcyksICIpW1F1ZXVlIExlbmd0aCA9ICIsIG1fcXVldWUuc2l6ZSgpLAotICAgICAgICAiLCBN
YXAgU2l6ZSA9ICIsIG1fcGxhbnMuc2l6ZSgpLCAiLCBOdW0gUmVhZHkgPSAiLCBtX3JlYWR5UGxh
bnMuc2l6ZSgpLAotICAgICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9m
QWN0aXZlVGhyZWFkcywgIi8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOwotfQotCi11bnNpZ25l
ZCBXb3JrbGlzdDo6c2V0TnVtYmVyT2ZUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywg
aW50IHJlbGF0aXZlUHJpb3JpdHkpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fc3VzcGVuc2lv
bkxvY2sgfTsKLSAgICBhdXRvIGN1cnJlbnROdW1iZXJPZlRocmVhZHMgPSBtX3RocmVhZHMuc2l6
ZSgpOwotICAgIGlmIChudW1iZXJPZlRocmVhZHMgPCBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzKSB7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzOyBpLS0gPiBu
dW1iZXJPZlRocmVhZHM7KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdGhyZWFkc1tpXS0+bV90
aHJlYWQtPmhhc1VuZGVybHlpbmdUaHJlYWQobG9ja2VyKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgbV90aHJlYWRz
W2ldLT5tX3RocmVhZC0+bm90aWZ5KGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnROdW1i
ZXJPZlRocmVhZHM7IGktLSA+IG51bWJlck9mVGhyZWFkczspIHsKLSAgICAgICAgICAgIGJvb2wg
aXNTdG9wcGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgICAgICAgICBpc1N0b3BwZWQgPSBtX3RocmVh
ZHNbaV0tPm1fdGhyZWFkLT50cnlTdG9wKGxvY2tlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIWlzU3RvcHBlZCkKLSAgICAgICAgICAgICAgICBtX3RocmVhZHNbaV0tPm1fdGhy
ZWFkLT5qb2luKCk7Ci0gICAgICAgICAgICBtX3RocmVhZHMucmVtb3ZlKGkpOwotICAgICAgICB9
Ci0gICAgICAgIG1fdGhyZWFkcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBBU1NFUlQobV9udW1i
ZXJPZkFjdGl2ZVRocmVhZHMgPD0gbnVtYmVyT2ZUaHJlYWRzKTsKLSAgICB9IGVsc2UgaWYgKG51
bWJlck9mVGhyZWFkcyA+IGN1cnJlbnROdW1iZXJPZlRocmVhZHMpIHsKLSAgICAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudE51
bWJlck9mVGhyZWFkczsgaSA8IG51bWJlck9mVGhyZWFkczsgaSsrKQotICAgICAgICAgICAgY3Jl
YXRlTmV3VGhyZWFkKGxvY2tlciwgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAgfQotICAgIHJldHVy
biBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzOwotfQotCi1zdGF0aWMgV29ya2xpc3QqIHRoZUdsb2Jh
bERGR1dvcmtsaXN0Owotc3RhdGljIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRz
Owotc3RhdGljIHVuc2lnbmVkIG51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzOwotCi1zdGF0aWMg
dW5zaWduZWQgZ2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKQotewotICAgIHJldHVybiBu
dW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcyA/IG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzIDog
T3B0aW9uczo6bnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKTsKLX0KLQotc3RhdGljIHVuc2ln
bmVkIGdldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKCkKLXsKLSAgICByZXR1cm4gbnVtYmVy
T2ZGVExDb21waWxlclRocmVhZHMgPyBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA6IE9wdGlv
bnM6Om51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKCk7Ci19Ci0KLXVuc2lnbmVkIHNldE51bWJl
ck9mREZHQ29tcGlsZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAgICBh
dXRvIHByZXZpb3VzTnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVh
ZHMoKTsKLSAgICBudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFkczsK
LSAgICByZXR1cm4gcHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLXVuc2lnbmVkIHNldE51
bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAg
ICBhdXRvIHByZXZpb3VzTnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZGVExDb21waWxlclRo
cmVhZHMoKTsKLSAgICBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFk
czsKLSAgICByZXR1cm4gcHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLVdvcmtsaXN0JiBl
bnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGlu
aXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVHbG9iYWxXb3JrbGlzdE9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3Jr
bGlzdCA9ICZXb3JrbGlzdDo6Y3JlYXRlKCJERkciLCBnZXROdW1iZXJPZkRGR0NvbXBpbGVyVGhy
ZWFkcygpLCBPcHRpb25zOjpwcmlvcml0eURlbHRhT2ZERkdDb21waWxlclRocmVhZHMoKSkubGVh
a1JlZigpOwotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9i
YWxERkdXb3JrbGlzdCA9IHdvcmtsaXN0OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFs
REZHV29ya2xpc3Q7Ci19Ci0KLVdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JO
dWxsKCkKLXsKLSAgICByZXR1cm4gdGhlR2xvYmFsREZHV29ya2xpc3Q7Ci19Ci0KLXN0YXRpYyBX
b3JrbGlzdCogdGhlR2xvYmFsRlRMV29ya2xpc3Q7Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxG
VExXb3JrbGlzdCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9i
YWxXb3JrbGlzdE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxX
b3JrbGlzdE9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3JrbGlzdCA9ICZXb3Jr
bGlzdDo6Y3JlYXRlKCJGVEwiLCBnZXROdW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLCBPcHRp
b25zOjpwcmlvcml0eURlbHRhT2ZGVExDb21waWxlclRocmVhZHMoKSkubGVha1JlZigpOwotICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9iYWxGVExXb3JrbGlz
dCA9IHdvcmtsaXN0OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsRlRMV29ya2xpc3Q7
Ci19Ci0KLVdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkKLXsKLSAg
ICByZXR1cm4gdGhlR2xvYmFsRlRMV29ya2xpc3Q7Ci19Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9i
YWxXb3JrbGlzdEZvcihDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEludmFsaWRDb21waWxhdGlvbk1vZGU6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlz
dCgpOwotICAgIGNhc2UgREZHTW9kZToKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dv
cmtsaXN0KCk7Ci0gICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2Rl
OgotICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsRlRMV29ya2xpc3QoKTsKLSAgICB9Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZH
V29ya2xpc3QoKTsKLX0KLQotdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMoKSB7IHJldHVybiAy
OyB9Ci0KLVdvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQot
ewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBlbnN1
cmVHbG9iYWxERkdXb3JrbGlzdCgpOwotICAgIGNhc2UgMToKLSAgICAgICAgcmV0dXJuIGVuc3Vy
ZUdsb2JhbEZUTFdvcmtsaXN0KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0
KCk7Ci0gICAgfQotfQotCi1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxs
KHVuc2lnbmVkIGluZGV4KQotewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0g
ICAgICAgIHJldHVybiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7Ci0gICAgY2Fz
ZSAxOgotICAgICAgICByZXR1cm4gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotV29ya2xpc3QmIGV4aXN0aW5nV29ya2xp
c3RGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBXb3JrbGlzdCogcmVzdWx0ID0gZXhp
c3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQpOwotICAgIHJldHVybiAqcmVzdWx0OwotfQotCi12b2lkIGNvbXBsZXRlQWxsUGxhbnNG
b3JWTShWTSYgdm0pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERG
Rzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xp
c3QtPmNvbXBsZXRlQWxsUGxhbnNGb3JWTSh2bSk7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFC
TEUoREZHX0pJVCkKLQotdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQotewotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU3NmUwM2U0N2U2ZWY1MDNjNmQwMTE2ZWNmYmRjMGE4YzZjNzVjODguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkRGR1BsYW4uaCIKLSNpbmNsdWRlICJERkdUaHJlYWRE
YXRhLmgiCi0jaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9D
b25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi1jbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFdvcmtsaXN0PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7IE5vdEtub3du
LCBDb21waWxpbmcsIENvbXBpbGVkIH07Ci0KLSAgICB+V29ya2xpc3QoKTsKLSAgICAKLSAgICBz
dGF0aWMgUmVmPFdvcmtsaXN0PiBjcmVhdGUoQ1N0cmluZyYmIHRpZXJOYW1lLCB1bnNpZ25lZCBu
dW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Ci0gICAgCi0gICAgdm9p
ZCBlbnF1ZXVlKFJlZjxQbGFuPiYmKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQg
dG86Ci0gICAgLy8gd29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7
Ci0gICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKLSAgICB2
b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
VmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpOwotCi0gICAgdm9pZCB3YWl0VW50aWxBbGxQbGFu
c0ZvclZNQXJlUmVhZHkoVk0mKTsKLSAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JW
TShWTSYsIENvbXBpbGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7Ci0gICAgdm9pZCByZW1v
dmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mKTsKLSAgICAKLSAgICBTdGF0ZSBjb21waWxhdGlvblN0
YXRlKENvbXBpbGF0aW9uS2V5KTsKLSAgICAKLSAgICBzaXplX3QgcXVldWVMZW5ndGgoKTsKLSAg
ICAKLSAgICB2b2lkIHN1c3BlbmRBbGxUaHJlYWRzKCk7Ci0gICAgdm9pZCByZXN1bWVBbGxUaHJl
YWRzKCk7Ci0gICAgCi0gICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7Ci0gICAgCi0g
ICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxs
IHRocmVhZHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtS
ZWZlcmVuY2VzKFZpc2l0b3ImKTsKLSAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOwotICAg
IAotICAgIHZvaWQgcmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShWTSYpOwotICAgIAotICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIHVuc2lnbmVkIHNldE51bWJlck9m
VGhyZWFkcyh1bnNpZ25lZCwgaW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgV29ya2xpc3QoQ1N0
cmluZyYmIHRpZXJOYW1lKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJl
ck9mVGhyZWFkcywgaW50KTsKLSAgICB2b2lkIGNyZWF0ZU5ld1RocmVhZChjb25zdCBBYnN0cmFj
dExvY2tlciYsIGludCk7Ci0gICAgCi0gICAgY2xhc3MgVGhyZWFkQm9keTsKLSAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkQm9keTsKLSAgICAKLSAgICB2b2lkIHJ1blRocmVhZChUaHJlYWREYXRhKik7
Ci0gICAgc3RhdGljIHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwotICAgIAot
ICAgIHZvaWQgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFu
PiwgOD4mKTsKLQotICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3Ry
ZWFtJikgY29uc3Q7Ci0gICAgCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMg
eyAwIH07Ci0gICAgQ1N0cmluZyBtX3RocmVhZE5hbWU7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWREYXRhPj4gbV90aHJlYWRzOwotICAgIAotICAgIC8vIFVzZWQgdG8gaW5mb3Jt
IHRoZSB0aHJlYWQgYWJvdXQgd2hhdCB3b3JrIHRoZXJlIGlzIGxlZnQgdG8gZG8uCi0gICAgRGVx
dWU8UmVmUHRyPFBsYW4+PiBtX3F1ZXVlOwotICAgIAotICAgIC8vIFVzZWQgdG8gYW5zd2VyIHF1
ZXN0aW9ucyBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvZGUgYmxvY2suIFRoaXMKLSAg
ICAvLyBpcyBwYXJ0aWN1bGFybHkgZ3JlYXQgZm9yIHRoZSBjdGlfb3B0aW1pemUgT1NSIHNsb3cg
cGF0aCwgd2hpY2ggd2FudHMKLSAgICAvLyB0byBrbm93OiBkaWQgSSBnZXQgaGVyZSBiZWNhdXNl
IGEgYmV0dGVyIHZlcnNpb24gb2YgbWUganVzdCBnb3QKLSAgICAvLyBjb21waWxlZD8KLSAgICB0
eXBlZGVmIEhhc2hNYXA8Q29tcGlsYXRpb25LZXksIFJlZlB0cjxQbGFuPj4gUGxhbk1hcDsKLSAg
ICBQbGFuTWFwIG1fcGxhbnM7Ci0gICAgCi0gICAgLy8gVXNlZCB0byBxdWlja2x5IGZpbmQgd2hp
Y2ggcGxhbnMgaGF2ZSBiZWVuIGNvbXBpbGVkIGFuZCBhcmUgcmVhZHkgdG8KLSAgICAvLyBiZSBj
b21wbGV0ZWQuCi0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMTY+IG1fcmVhZHlQbGFuczsKLSAg
ICBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKLSAgICBVbmNo
ZWNrZWRDb25kaXRpb24gbV9wbGFuQ29tcGlsZWQ7Ci0KLSAgICBVbmNoZWNrZWRMb2NrIG1fc3Vz
cGVuc2lvbkxvY2s7Ci0gICAgQm94PFVuY2hlY2tlZExvY2s+IG1fbG9jazsKLX07Ci0KLUpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzKHVuc2ln
bmVkKTsKLUpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51bWJlck9mRlRMQ29tcGlsZXJU
aHJlYWRzKHVuc2lnbmVkKTsKLQotLy8gRm9yIERGR01vZGUgY29tcGlsYXRpb25zLgotSlNfRVhQ
T1JUX1BSSVZBVEUgV29ya2xpc3QmIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci1KU19FWFBP
UlRfUFJJVkFURSBXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgpOwot
Ci0vLyBGb3IgRlRMTW9kZSBhbmQgRlRMRm9yT1NSRW50cnlNb2RlIGNvbXBpbGF0aW9ucy4KLUpT
X0VYUE9SVF9QUklWQVRFIFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwotSlNf
RVhQT1JUX1BSSVZBVEUgV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwo
KTsKLQotV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKENvbXBpbGF0aW9uTW9kZSk7
Ci0KLS8vIFNpbXBsaWZ5IGRvaW5nIHRoaW5ncyBmb3IgYWxsIHdvcmtsaXN0cy4KLXVuc2lnbmVk
IG51bWJlck9mV29ya2xpc3RzKCk7Ci1Xb3JrbGlzdCYgZW5zdXJlV29ya2xpc3RGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCk7Ci1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxs
KHVuc2lnbmVkIGluZGV4KTsKLVdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgodW5z
aWduZWQgaW5kZXgpOwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgY29tcGxl
dGVBbGxQbGFuc0ZvclZNKFZNJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1l
IFZpc2l0b3I+Ci12b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIFZNJiwgY29u
c3QgRnVuYyYpOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjYzI2NmY2ZjM2NTYxYWM2ZWM2NDI1MjUxYWRhOGQ2ZjQyZjIwMGM4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJERkdQbGFuSW5saW5lcy5oIgotI2luY2x1ZGUg
IkRGR1dvcmtsaXN0LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotI2lm
IEVOQUJMRShERkdfSklUKQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNp
dG9yPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2
bSwgY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmts
aXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAg
ICB3b3JrbGlzdC0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCB2bSwgZnVuYyk7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9p
ZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYg
dm0sIGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsK
LSAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIg
IT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52
YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwg
ZnVuYyk7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJikKLXsKLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmgKaW5kZXggZWJjNjMzM2IyMjAxMzY4YWY0Y2E3NWFiZDczZWY1
MDZjNjRjNDU4MS4uYWE5YzZlMzY5YzE1OTdkOWZjODkxMjZkZTljZTc0ZGZlZDEzYWQxZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTQgQEAK
IAogI2lmIEVOQUJMRShGVExfSklUKQogCi0jaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBleHRlcm4gY29uc3QgY2hhciogY29uc3QgdGllck5h
bWU7CiAKLXZvaWQgY29tcGlsZShTdGF0ZSYsIERGRzo6U2FmZXBvaW50OjpSZXN1bHQmKTsKK3Zv
aWQgY29tcGlsZShTdGF0ZSYsIFNhZmVwb2ludDo6UmVzdWx0Jik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggNDNj
ZDk1OGE5YmRmOTFkYmM4MTM5OWI0MzBiNTA5MGNkYmFhODA1Mi4uZjZmYzcxMmU5NDFkMDYxMmVj
ZWRiNmM3MTYyZjNlMWU1ZGRkODcxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsu
Y3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICB9CiAK
ICAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKCkpIHsKLSAgICBjYXNlIEZUTE1vZGU6IHsK
KyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMOiB7CiAgICAgICAgIGJvb2wgcmVxdWly
ZXNBcml0eUZpeHVwID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKICAgICAgICAg
aWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0
eUZpeHVwKSB7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1haW5QYXRoSnVt
cHM7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogewor
ICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeTogewogICAgICAgICAv
LyBXZSBqdW1wIHRvIGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0ZXIgaGF2aW5nIGJv
eGVkIHVwIGFsbCBvZiB0aGUKICAgICAgICAgLy8gdmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLiBFdmVyeXRoaW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhpcwogICAgICAgICAv
LyBwb2ludCB3ZSd2ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNpY2FsbHkgd2UganVz
dCBoYXZlIHRvIG1ha2UgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggYzA0NzUyZDdiZDlmMWIyZjhhMmVlNTMzMTU3ODEyZTlmZjU1NTFh
OS4uODE2N2ZhM2QwNTJjMTBiZGYxYjZmNjQ5MGNlMzU5MDdkYWQ4YmYzNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMzU5LDcgKzM1OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkp
KSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Bs
YW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAg
ICAgICAgICAgICBhdXRvKiBqaXRDb2RlID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JF
bnRyeSgpOwogICAgICAgICAgICAgICAgIEZpeGVkVmVjdG9yPERGRzo6Rmx1c2hGb3JtYXQ+IGFy
Z3VtZW50Rmx1c2hGb3JtYXRzKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpOyArK2kpCkBAIC0xOTQ2Nyw3ICsxOTQ2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHdlIHNob3VsZCBiZSBhYmxl
IHRvIGRvIGF0IGxlYXN0IHNvbWUgdmFsaWRhdGlvbiB3aGVuIE9TUiBlbnRlcmluZy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTUxMQogICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkKLSAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoLm1fcGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAg
ICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6
RlRMRm9yT1NSRW50cnkpIHsKIAogICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNE
ZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQog
ICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmco
IkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQs
ICIsIGF2YWlsYWJpbGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9y
aWdpbikuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKaW5kZXgg
MTBiODg2MmM1OTU4ZWRiYzU5ZDJhMWU4MzEzZDM3Nzc0YTNiODRmZS4uMDFiZGVlYzlmZDM3OTZm
NGU0N2RiYWU3MTIwZDllNmRhZGU2ZGIwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MiwxMSArNDIsMTEgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkK
ICAgICA6IGdyYXBoKGdyYXBoKQogewogICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUoKSkg
ewotICAgIGNhc2UgRlRMTW9kZTogeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6
IHsKICAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICBjYXNlIEpJ
VENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6IHsKICAgICAgICAgUmVmUHRyPEZvck9T
UkVudHJ5SklUQ29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7
CiAgICAgICAgIGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5t
X3Byb2ZpbGVkQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAgICAgY29kZS0+c2V0Qnl0
ZWNvZGVJbmRleChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCmluZGV4IGQyOTUzZTEwY2M5YTFkYWI2YjY3ODBmYjBm
MmQ2NDM1NWRiN2M4M2YuLmEzZWZlYmYxZGE3Nzg4ZmYzMDNlNGY2ODRmNzg3OTVhMWRhY2NjNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTIgQEAg
Y2xhc3MgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTsKIAogaW5saW5lIGJvb2wgdmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIERGRzo6dmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZChERkc6OkZUTE1vZGUpOworICAgIHJldHVybiBERkc6OnZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoSklUQ29tcGlsYXRpb25Nb2RlOjpGVEwpOwogfQogCiBpbmxpbmUgYm9vbCBzaG91
bGREdW1wRGlzYXNzZW1ibHkoKQogewotICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3Nl
bWJseShERkc6OkZUTE1vZGUpOworICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3NlbWJs
eShKSVRDb21waWxhdGlvbk1vZGU6OkZUTCk7CiB9CiAKIGNsYXNzIFN0YXRlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggODYxYTQwMmU1MGQwYmNjMGZlYWU2MDMwNDdjZjM1
YzJlY2RjNGRlNy4uMjQ0ZjgyYTZmNDYxMjA0MTFkNTdiMGFhNmUzYzhhZGZlZWU5OGQ0YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRl
ICJDb2RlQmxvY2tTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGluZ1Njb3BlLmgiCiAj
aW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdElubGlu
ZXMuaCIKICNpbmNsdWRlICJFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDYsNyAr
NDUsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldElu
bGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgotI2luY2x1ZGUgIkpJVFdv
cmtsaXN0LmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNG
aW5hbGl6YXRpb25SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIgogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgpAQCAtNjM5LDE3ICs2MzgsMTUgQEAgdm9pZCBI
ZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQog
ICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJl
R2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKG1fdm0pOworICAgIEpJVFdvcmtsaXN0
OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQotICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0p
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBI
ZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJl
bnRseUV4ZWN1dGluZyhmdW5jKTsKLSAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAg
IERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKKyAgICBK
SVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KHZpc2l0b3IsIG1fdm0sIGZ1bmMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBl
bmFtZSBWaXNpdG9yPgpAQCAtNzI2LDEyICs3MjMsOSBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2lu
ZygpCiAKIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCkKIHsK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygp
OyBpLS07KQotICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS5yZW1vdmVE
ZWFkUGxhbnMobV92bSk7Ci0jZW5kaWYKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5yZW1vdmVEZWFkUGxhbnMobV92bSk7CiB9CiAKIHN0cnVjdCBHYXRoZXJFeHRyYUhl
YXBEYXRhIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CkBAIC0xNjUzLDE0ICsxNjQ3LDYg
QEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIGNvbm4pCiAgICAgICAg
ICAgICB2aXNpdG9yLnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoTm9Mb2NraW5nTmVjZXNzYXJ5KTsK
ICAgICAgICAgfSk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VKSVQo
KSkgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlm
IChKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbEZvclZNKG1f
dm0pCi0gICAgICAgICAgICAmJiBjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IpCi0gICAg
ICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAg
IFVOVVNFRF9QQVJBTShjb25uKTsKICAgICAKICAgICBpZiAoYXV0byogc2hhZG93Q2hpY2tlbiA9
IHZtKCkuc2hhZG93Q2hpY2tlbigpKQpAQCAtMjE3Myw4ICsyMTU5LDcgQEAgdm9pZCBIZWFwOjpz
dXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKICAgICAvLyB0aGUgd29ya2xpc3RzIHVzZSBBdXRvbWF0
aWNUaHJlYWRzIGFueXdheS4KICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KQotICAgICAgICBERkc6OmVuc3VyZVdvcmtsaXN0Rm9ySW5kZXgoaSkuc3VzcGVuZEFsbFRo
cmVhZHMoKTsKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5zdXNwZW5k
QWxsVGhyZWFkcygpOwogI2VuZGlmCiB9CiAKQEAgLTIzODksOCArMjM3NCw3IEBAIHZvaWQgSGVh
cDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKCkKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAo
IU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4aXN0aW5n
V29ya2xpc3RGb3JJbmRleChpKS5yZXN1bWVBbGxUaHJlYWRzKCk7CisgICAgSklUV29ya2xpc3Q6
OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucmVzdW1lQWxsVGhyZWFkcygpOwogI2VuZGlmCiB9CiAK
QEAgLTI5MDIsMjYgKzI4ODYsMjUgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQog
ICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAogICAgICAgICBD
b25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKKyNpZiBFTkFCTEUoSklUKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAg
ICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgICAgICJEdyIsICJERkcgV29ya2xpc3Rz
IiwKKyAgICAgICAgICAgICJKdyIsICJKSVQgV29ya2xpc3QiLAogICAgICAgICAgICAgTUFLRV9N
QVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2aXNpdG9yKSB7
Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRv
ciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CisgICAgICAgICAgICAgICAgU2V0Um9v
dE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkpJVFdv
cmtMaXN0KTsKIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgREZHOjpleGlzdGluZ1dv
cmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS52aXNpdFdlYWtSZWZl
cmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyOQotICAg
ICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAorICAgICAg
ICAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAgICAgbV92bSwKICAgICAgICAg
ICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCB2aXNpdG9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiSklUIFdvcmtsaXN0czpcbiIsIHZpc2l0b3IpOwogICAgICAgICAgICAgfSkp
LAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFya2luZyk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFiMjg0OGY4Y2M2Mzk0Mjg4ODE2
Yjg3MTg4YjljODZjMzE4OGE0YTAuLjkxNDVjZDE2MzFmMTJhMDY5MGRlZTIyM2QwZWE2NTM0MzYx
NTE0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTk3LDcgKzk3LDYgQEAgY2xh
c3MgSlNDR0xpYldyYXBwZXJPYmplY3Q7CiAKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3Vs
YXRpdmVKSVQ7Ci1jbGFzcyBXb3JrbGlzdDsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBB
U1NFUlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUm9v
dE1hcmtSZWFzb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jvb3RNYXJrUmVhc29u
LmgKaW5kZXggMjNmYjU5ODQ4OTg3ZmM1Y2Y1YmJmNzUzNDE1YjU5YzM0YWE0N2E0ZC4uZjIwOTYz
MzZhMmQyYTM2MTUzMzAxMmI0MWUyODJmNTA1MDNlNTVmNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvUm9vdE1hcmtSZWFzb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Sb290TWFya1JlYXNvbi5oCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHYoV2Vha01hcFNwYWNlKSBcCiAgICAgdihXZWFrU2V0cykgXAogICAgIHYoT3V0
cHV0KSBcCi0gICAgdihERkdXb3JrTGlzdHMpIFwKKyAgICB2KEpJVFdvcmtMaXN0KSBcCiAgICAg
dihDb2RlQmxvY2tzKSBcCiAgICAgdihET01HQ091dHB1dCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCmluZGV4IGI4M2E0MDZmNzNjYmQ5Zjg1Yjk1MDViYmQwZDkwYTIyZmY3M2I3ODIuLjQz
OGU4MmYxZTU2MjJjZDdmNmU2YWIxNzBmYzg3N2Q1NGRkODU1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKQEAgLTY1OCwxMCArNjU4LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmco
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIE1vbm90b25pY1RpbWUgYmVmb3Jl
IHsgfTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkKLSAgICAgICAg
YmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgCiAgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgpAQCAtODE3LDIwICs4MTMs
NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2lu
KCkpOwogCiAgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5l
dyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFz
ZWxpbmVKSVQsIGVmZm9ydCkpOwotCi0gICAgTW9ub3RvbmljVGltZSBhZnRlciB7IH07Ci0gICAg
aWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKLSAgICAgICAgYWZ0ZXIgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxD
b21waWxlVGltZXMoKSkKLSAgICAgICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBh
ZnRlciAtIGJlZm9yZTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1l
cygpKSkgewotICAgICAgICBDU3RyaW5nIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxv
Y2tOYW1lLCAiIHdpdGggQmFzZWxpbmUgSklUIGludG8gIiwgbV9saW5rQnVmZmVyLT5zaXplKCks
ICIgYnl0ZXMgaW4gIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcy5cbiIp
OwotICAgIH0KLQogICAgIGxpbmsoKTsKIH0KIApAQCAtMTAyMSw2ICsxMDAzLDEzIEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQogICAgIHJldHVybiBDb21w
aWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3NpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbGlua0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
bGlua0J1ZmZlci0+c2l6ZSgpOworfQorCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKQEAgLTEwNzcsMjEgKzEwNjYsMTEgQEAgaW50IEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2Nr
KSAtIDEpLm9mZnNldCgpOwogfQogCi1ib29sIEpJVDo6cmVwb3J0Q29tcGlsZVRpbWVzKCkKLXsK
LSAgICByZXR1cm4gT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkgfHwgT3B0aW9uczo6cmVw
b3J0QmFzZWxpbmVDb21waWxlVGltZXMoKTsKLX0KLQotYm9vbCBKSVQ6OmNvbXB1dGVDb21waWxl
VGltZXMoKQotewotICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKSB8fCBPcHRpb25zOjpy
ZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpOwotfQotCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+
IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRz
PiByZXN1bHQ7CiAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsK
LSAgICAgICAgcmVzdWx0LmFkZCgiVG90YWwgQ29tcGlsZSBUaW1lIiwgdG90YWxCYXNlbGluZUNv
bXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWUpOwor
ICAgICAgICByZXN1bHQuYWRkKCJUb3RhbCBDb21waWxlIFRpbWUiLCB0b3RhbENvbXBpbGVUaW1l
KCkpOwogICAgICAgICByZXN1bHQuYWRkKCJCYXNlbGluZSBDb21waWxlIFRpbWUiLCB0b3RhbEJh
c2VsaW5lQ29tcGlsZVRpbWUpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICByZXN1bHQu
YWRkKCJERkcgQ29tcGlsZSBUaW1lIiwgdG90YWxERkdDb21waWxlVGltZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCBjNzBhN2Q5ZTMzZmExNTZjZGI1NGM4OGFjNzIxNzhhNjc4NDRmMWZm
Li43YTY0OTAyOWU3ZTkyYmE5NjNjM2VjMjRiNzEyNTIwNTcxMjNhNTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKQEAgLTIxNiw2ICsyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRo
cmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQmFzZWxpbmVQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQmFzZWxpbmVQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2MwOWEzZmY1
MGI4YzE0ODA3NzZmYzNiODA0MDY0OTYxODg4MGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRCYXNlbGluZVBsYW4uY3BwCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSklUQmFzZWxpbmVQbGFuLmgiCisKKyNpZiBFTkFCTEUoSklU
KQorCituYW1lc3BhY2UgSlNDIHsKKworSklUQmFzZWxpbmVQbGFuOjpKSVRCYXNlbGluZVBsYW4o
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKKyAgICA6IEpJVFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSwgY29kZUJs
b2NrKQorICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCit7CisgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCk7Cit9CisKK2F1dG8gSklUQmFzZWxpbmVQbGFuOjpjb21waWxlSW5UaHJlYWRJ
bXBsKCkgLT4gQ29tcGlsYXRpb25QYXRoCit7CisgICAgbV9qaXQuY29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBCYXNlbGlu
ZVBhdGg7Cit9CisKK3NpemVfdCBKSVRCYXNlbGluZVBsYW46OmNvZGVTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9qaXQuY29kZVNpemUoKTsKK30KKworQ29tcGlsYXRpb25SZXN1bHQgSklU
QmFzZWxpbmVQbGFuOjpmaW5hbGl6ZSgpCit7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgewor
ICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsK
KyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21w
aWxhdGlvbiBmYWlsZWQuIik7CisgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNv
b24oKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CisgICAg
ICAgIFdURjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIp
OworICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1f
Y29kZUJsb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRCYXNlbGluZVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQmFzZWxpbmVQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhkN2VkODc1MmJlZGUzNDk5
NzU5ZWM1YTMzZDFkZjMzZmI2YWUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQmFzZWxpbmVQbGFuLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSklUUGxhbi5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUQmFzZWxpbmVQbGFuIGZpbmFsIDogcHVibGlj
IEpJVFBsYW4geworcHVibGljOgorICAgIEpJVEJhc2VsaW5lUGxhbihDb2RlQmxvY2sqLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworCisgICAgQ29tcGlsYXRpb25Q
YXRoIGNvbXBpbGVJblRocmVhZEltcGwoKSBmaW5hbDsKKyAgICBzaXplX3QgY29kZVNpemUoKSBj
b25zdCBmaW5hbDsKKyAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZSgpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIEpJVCBtX2ppdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b21waWxhdGlvbktleS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg5ZThlMDRlZTEyNjM3ODg2ZmQyOGY0YTRi
YWI2MGIwYzQxNTZkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25LZXkuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgSklUQ29tcGls
YXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlz
KSB7CisgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRo
ICIsIG1fbW9kZSwgIikiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzczY2EyYWEwNGQwZmZlN2RlY2U1NDU0MDBjYzMzZmIxNmZjY2ZlMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaApAQCAt
MCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25Nb2RlLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENv
ZGVCbG9jazsKK2NsYXNzIENvZGVCbG9ja1NldDsKKworY2xhc3MgSklUQ29tcGlsYXRpb25LZXkg
eworcHVibGljOgorICAgIEpJVENvbXBpbGF0aW9uS2V5KCkKKyAgICAgICAgOiBtX3Byb2ZpbGVk
QmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZh
bGlkQ29tcGlsYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAgICBKSVRDb21waWxhdGlvbktl
eShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9wcm9maWxlZEJs
b2NrKG51bGxwdHIpCisgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAgOiBtX3Byb2ZpbGVk
QmxvY2socHJvZmlsZWRCbG9jaykKKyAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFs
aWRDb21waWxhdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBt
X21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgfQor
ICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
ZmlsZWRCbG9jazsgfQorICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0
aW9uS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxv
Y2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3Ro
ZXIubV9tb2RlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sq
Pjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlw
ZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKK307CisK
K3N0cnVjdCBKSVRDb21waWxhdGlvbktleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBKSVRDb21waWxhdGlvbktleSYgYSwgY29uc3QgSklU
Q29tcGlsYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
SklUQ29tcGlsYXRpb25LZXk+IDogSlNDOjpKSVRDb21waWxhdGlvbktleUhhc2ggeyB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpKSVRDb21waWxhdGlvbktleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8SlNDOjpKSVRDb21waWxhdGlvbktleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNTlkMzk0YTQ2N2M1ZmRkNjhmZmUyZjljMmZiNTI1NmE3NDIyMDZjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUu
Y3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9u
TW9kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKSVRD
b21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWRDb21waWxhdGlvbk1vZGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKKyAgICAgICAgb3V0LnByaW50KCJCYXNlbGluZU1v
ZGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpERkc6
CisgICAgICAgIG91dC5wcmludCgiREZHTW9kZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAgICAgICAgb3V0LnByaW50KCJGVExNb2RlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NS
RW50cnk6CisgICAgICAgIG91dC5wcmludCgiRlRMRm9yT1NSRW50cnlNb2RlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JjMGUw
N2ZmNTNjYTMxNTk5YjU2OGVmYTIxNTkxYTYzMmNiOTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmgKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBjbGFzcyBKSVRDb21waWxhdGlvbk1vZGUgeworICAgIEludmFsaWRDb21waWxh
dGlvbiwKKyAgICBCYXNlbGluZSwKKyAgICBERkcsCisgICAgRlRMLAorICAgIEZUTEZvck9TUkVu
dHJ5Cit9OworCitpbmxpbmUgYm9vbCBpc0ZUTChKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMOgor
ICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkpJVENvbXBpbGF0aW9uTW9kZSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
aW5kZXggZDc2NTVjN2Q4ZGZmNmMwMDViMDNhZjcxYTgyOTVlOWM3Yzk4YzQ4Ni4uYTY1ZTQxNjVm
NGVjNmZiZjU5ZDcyNDZjY2M1YTI4YjNmZDA0OWE3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0zMiwxMSArMzIsOSBAQAogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKLSNpbmNsdWRlICJERkdDb21w
aWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JF
bnRyeS5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0Lmgi
CiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25GdXp6LmgiCiAjaW5j
bHVkZSAiRnJhbWVUcmFjZXJzLmgiCkBAIC00Niw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSklULmgi
CiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRl
ICJKU0FzeW5jRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uLmgiCkBAIC0xODk4LDQwICsxODk3LDI4IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1
cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxs
cHRyLCBudWxscHRyKTsKICAgICB9CiAKLSAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nl
c3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVk
Ci0gICAgLy8gcmVwbGFjZW1lbnQuCi0gICAgREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6
OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKTsKLSAgICBBU1NFUlQoCi0gICAgICAg
ICF3b3JrbGlzdAotICAgICAgICB8fCAhKHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6
Q29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBERkc6OkRGR01vZGUpKSAhPSBERkc6OldvcmtsaXN0
OjpOb3RLbm93bgotICAgICAgICAmJiBjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50
KCkpKTsKLQotICAgIERGRzo6V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7Ci0gICAgaWYg
KHdvcmtsaXN0KSB7Ci0gICAgICAgIC8vIFRoZSBjYWxsIHRvIERGRzo6V29ya2xpc3Q6OmNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKCkgd2lsbCBjb21wbGV0ZSBhbGwgcmVhZHkKLSAgICAgICAg
Ly8gKGkuZS4gY29tcGlsZWQpIGNvZGUgYmxvY2tzLiBCdXQgaWYgaXQgY29tcGxldGVzIG91cnMs
IHdlIGFsc28gbmVlZCB0byBrbm93Ci0gICAgICAgIC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28g
dGhhdCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBhdHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKLSAg
ICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBoYXZlIGFscmVhZHkgYWxzbyBzZXQg
dGhlIGFwcHJvcHJpYXRlIEpJVCBleGVjdXRpb24KLSAgICAgICAgLy8gY291bnQgdGhyZXNob2xk
IGRlcGVuZGluZyBvbiB3aGF0IGhhcHBlbmVkLCBzbyBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGFu
eXRoaW5nCi0gICAgICAgIC8vIGJ1dCBzdWNjZXNzZnVsIHdlIGp1c3Qgd2FudCB0byByZXR1cm4g
ZWFybHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RTdGF0ZSA9PQotICAgICAgICAvLyBERkc6
OldvcmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCi0gICAgICAgIAotICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21w
aWxhdGlvblN0YXRlKCkKLSAgICAgICAgLy8gaGVyZSwgYW5kIGlmIGl0IHJldHVybmVkIENvbXBp
bGVkLCB3ZSBjb3VsZCBoYXZlIHRoZW4gY2FsbGVkCi0gICAgICAgIC8vIGNvbXBsZXRlQW5kU2No
ZWR1bGVPU1IoKSBiZWxvdy4gQnV0IHRoYXQgd291bGQgaGF2ZSBtZWFudCB0aGF0IGl0IGNvdWxk
IHRha2UKLSAgICAgICAgLy8gbG9uZ2VyIGZvciBjb2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6
IHRoZXkgd291bGQgb25seSBjb21wbGV0ZSB3aGVuICp0aGVpcioKLSAgICAgICAgLy8gZXhlY3V0
aW9uIGNvdW50IHRyaWdnZXIgZmlyZWQ7IGJ1dCB0aGF0IGNvdWxkIHRha2UgYSB3aGlsZSBzaW5j
ZSB0aGUgZmlyaW5nIGlzCi0gICAgICAgIC8vIHJhY3kuIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0
IGNvZGUgYmxvY2tzIHRoYXQgbmV2ZXIgcnVuIGFnYWluIGFmdGVyIGJlaW5nCi0gICAgICAgIC8v
IGNvbXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUgd29ya2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdz
IGZpbmUsIGJ1dCBpdCdzCi0gICAgICAgIC8vIHByb2JhYmx5IGEgd2FzdGUgb2YgbWVtb3J5LiBP
dXIgZ29hbCBoZXJlIGlzIHRvIGNvbXBsZXRlIGNvZGUgYmxvY2tzIGFzIHNvb24gYXMKLSAgICAg
ICAgLy8gcG9zc2libGUgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgdXMgZXhl
Y3V0aW5nIGJhc2VsaW5lIGNvZGUgYWZ0ZXIKLSAgICAgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMg
YWxyZWFkeSBhdmFpbGFibGUuCi0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2bSwgREZHOjpDb21waWxhdGlv
bktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkpOwotICAgIH0gZWxzZQotICAgICAgICB3b3Jr
bGlzdFN0YXRlID0gREZHOjpXb3JrbGlzdDo6Tm90S25vd247Ci0KLSAgICBpZiAod29ya2xpc3RT
dGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAvLyBUaGUgY2FsbCB0byBK
SVRXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oKSB3aWxsIGNvbXBsZXRlIGFs
bCByZWFkeQorICAgIC8vIChpLmUuIGNvbXBpbGVkKSBjb2RlIGJsb2Nrcy4gQnV0IGlmIGl0IGNv
bXBsZXRlcyBvdXJzLCB3ZSBhbHNvIG5lZWQgdG8ga25vdworICAgIC8vIHdoYXQgdGhlIHJlc3Vs
dCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBhdHRlbXB0IE9TUiBvciBpbW1l
ZGlhdGUKKyAgICAvLyByZW9wdGltaXphdGlvbi4gVGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBhbHNv
IHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1dGlvbgorICAgIC8vIGNvdW50IHRocmVzaG9s
ZCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCwgc28gaWYgdGhlIGNvbXBpbGF0aW9uIHdhcyBh
bnl0aGluZworICAgIC8vIGJ1dCBzdWNjZXNzZnVsIHdlIGp1c3Qgd2FudCB0byByZXR1cm4gZWFy
bHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RTdGF0ZSA9PQorICAgIC8vIEpJVFdvcmtsaXN0
OjpDb21waWxlZCwgYmVsb3cuCisKKyAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhbHRl
cm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKCkKKyAgICAv
LyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdlIGNvdWxkIGhhdmUgdGhlbiBj
YWxsZWQKKyAgICAvLyBjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKCkgYmVsb3cuIEJ1dCB0aGF0IHdv
dWxkIGhhdmUgbWVhbnQgdGhhdCBpdCBjb3VsZCB0YWtlCisgICAgLy8gbG9uZ2VyIGZvciBjb2Rl
IGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkgd291bGQgb25seSBjb21wbGV0ZSB3aGVuICp0
aGVpcioKKyAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dlciBmaXJlZDsgYnV0IHRoYXQgY291
bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMKKyAgICAvLyByYWN5LiBJdCBjb3Vs
ZCBhbHNvIG1lYW4gdGhhdCBjb2RlIGJsb2NrcyB0aGF0IG5ldmVyIHJ1biBhZ2FpbiBhZnRlciBi
ZWluZworICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUgd29ya2xpc3QgdW50aWwgbmV4
dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCisgICAgLy8gcHJvYmFibHkgYSB3YXN0ZSBvZiBt
ZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29tcGxldGUgY29kZSBibG9ja3MgYXMgc29vbiBh
cworICAgIC8vIHBvc3NpYmxlIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIHVz
IGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlIGFmdGVyCisgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMg
YWxyZWFkeSBhdmFpbGFibGUuCisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUg
PSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSgKKyAgICAgICAgdm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25Nb2RlOjpERkcpKTsKKworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmts
aXN0OjpDb21waWxpbmcpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJkZWxheU9wdGltaXplVG9ERkciLCAoImNvbXBpbGluZyIpKTsKICAgICAgICAgLy8gV2UgY2Fu
bm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxz
byBoYXZlIGFuIG9wdGltaXplZAogICAgICAgICAvLyByZXBsYWNlbWVudC4KQEAgLTE5NDAsNyAr
MTkyNyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRpbWl6ZSwgU2xv
d1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAKLSAgICBpZiAod29ya2xpc3RTdGF0ZSA9
PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgeworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJ
VFdvcmtsaXN0OjpDb21waWxlZCkgewogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudCBidXQgd2UgZGlkIGp1c3QgZ2V0IGNvbXBpbGVkLCB0aGVuCiAg
ICAgICAgIC8vIHRoZSBjb21waWxhdGlvbiBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLCBpbiB3
aGljaCBjYXNlIHRoZSBleGVjdXRpb24gY291bnQKICAgICAgICAgLy8gdGhyZXNob2xkcyBoYXZl
IGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBieQpAQCAtMjAwMyw3ICsxOTkwLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaXplLCBTbG93UGF0aFJldHVy
blR5cGUsIChWTSogdm1Qb2ludGVyLAogCiAgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCByZXBsYWNl
bWVudENvZGVCbG9jaywgbnVsbHB0ciwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAorICAg
ICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRyLCBKSVRDb21waWxhdGlv
bk1vZGU6OkRGRywgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMs
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjMyODY2MDZhNzVkYzIwMDVh
ODJiYWQzZTllYjRlNjIxYTdiYTFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSklUUGxhbi5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkFic3RyYWN0
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQ29t
cGlsYXRpb25UaHJlYWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2V4dGVybiBTZWNvbmRzIHRv
dGFsQmFzZWxpbmVDb21waWxlVGltZTsKK2V4dGVybiBTZWNvbmRzIHRvdGFsREZHQ29tcGlsZVRp
bWU7CitleHRlcm4gU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOworZXh0ZXJuIFNlY29uZHMg
dG90YWxGVExERkdDb21waWxlVGltZTsKK2V4dGVybiBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxl
VGltZTsKKworSklUUGxhbjo6SklUUGxhbihKSVRDb21waWxhdGlvbk1vZGUgbW9kZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgOiBtX21vZGUobW9kZSkKKyAgICAsIG1fdm0oJmNvZGVCbG9j
ay0+dm0oKSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKK3sKK30KKwordm9pZCBKSVRQ
bGFuOjpjYW5jZWwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhZ2UgIT0gSklUUGxhblN0
YWdlOjpDYW5jZWxlZCk7CisgICAgQVNTRVJUKG1fdm0pOworICAgIG1fc3RhZ2UgPSBKSVRQbGFu
U3RhZ2U6OkNhbmNlbGVkOworICAgIG1fdm0gPSBudWxscHRyOworICAgIG1fY29kZUJsb2NrID0g
bnVsbHB0cjsKK30KKwordm9pZCBKSVRQbGFuOjpub3RpZnlDb21waWxpbmcoKQoreworICAgIG1f
c3RhZ2UgPSBKSVRQbGFuU3RhZ2U6OkNvbXBpbGluZzsKK30KKwordm9pZCBKSVRQbGFuOjpub3Rp
ZnlSZWFkeSgpCit7CisgICAgbV9zdGFnZSA9IEpJVFBsYW5TdGFnZTo6UmVhZHk7Cit9CisKK2F1
dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKK3sKKyAgICBzd2l0Y2ggKG1fbW9kZSkg
eworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb246CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBUaWVyOjpC
YXNlbGluZTsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmU6CisgICAgICAg
IHJldHVybiBUaWVyOjpCYXNlbGluZTsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6REZH
OgorICAgICAgICByZXR1cm4gVGllcjo6REZHOworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2Rl
OjpGVEw6CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTEZvck9TUkVudHJ5OgorICAg
ICAgICByZXR1cm4gVGllcjo6RlRMOworICAgIH0KK30KKworSklUQ29tcGlsYXRpb25LZXkgSklU
UGxhbjo6a2V5KCkKK3sKKyAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2st
PmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKK30KKworYm9vbCBKSVRQbGFuOjppc0tu
b3duVG9CZUxpdmVBZnRlckdDKCkKK3sKKyAgICBpZiAobV9zdGFnZSA9PSBKSVRQbGFuU3RhZ2U6
OkNhbmNlbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX3ZtLT5oZWFwLmlz
TWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxp
dmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmIChtX3N0
YWdlID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJVFBs
YW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwg
U2hhcmVkVGFzazx2b2lkKENvZGVCbG9jayopPiYgZnVuYykKK3sKKyAgICBpZiAoIWlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91
dCBwZXJmb3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8g
YmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tz
IG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCisgICAgZnVuYy5ydW4obV9jb2RlQmxvY2spOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJVFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jayk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSklUUGxhbjo6Y29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJlcG9ydENvbXBpbGVUaW1lcygpCisgICAgICAgIHx8IE9wdGlvbnM6OnJlcG9y
dFRvdGFsQ29tcGlsZVRpbWVzKCkKKyAgICAgICAgfHwgKG1fdm0gJiYgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyKTsKK30KKworYm9vbCBKSVRQbGFuOjpyZXBvcnRDb21waWxlVGltZXMoKSBj
b25zdAoreworICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKQorICAgICAg
ICB8fCAoT3B0aW9uczo6cmVwb3J0QmFzZWxpbmVDb21waWxlVGltZXMoKSAmJiBtX21vZGUgPT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9y
dERGR0NvbXBpbGVUaW1lcygpICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykK
KyAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9ydEZUTENvbXBpbGVUaW1lcygpICYmIGlzRlRMKCkp
OworfQorCit2b2lkIEpJVFBsYW46OmNvbXBpbGVJblRocmVhZChKSVRXb3JrbGlzdFRocmVhZCog
dGhyZWFkKQoreworICAgIG1fdGhyZWFkID0gdGhyZWFkOworCisgICAgTW9ub3RvbmljVGltZSBi
ZWZvcmUgeyB9OworICAgIENTdHJpbmcgY29kZUJsb2NrTmFtZTsKKyAgICBpZiAoVU5MSUtFTFko
Y29tcHV0ZUNvbXBpbGVUaW1lcygpKSkKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisgICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygpKSkKKyAgICAgICAg
Y29kZUJsb2NrTmFtZSA9IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spOworCisgICAgQ29tcGlsYXRp
b25TY29wZSBjb21waWxhdGlvblNjb3BlOworCisgICAgaWYgKERGRzo6bG9nQ29tcGlsYXRpb25D
aGFuZ2VzKG1fbW9kZSkgfHwgT3B0aW9uczo6bG9nUGhhc2VUaW1lcygpKQorICAgICAgICBkYXRh
TG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIiB3aXRoICIsIG1fbW9k
ZSwgIiwgaW5zdHJ1Y3Rpb25zIHNpemUgPSAiLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6
ZSgpLCAiXG4iKTsKKworICAgIENvbXBpbGF0aW9uUGF0aCBwYXRoID0gY29tcGlsZUluVGhyZWFk
SW1wbCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQoKHBhdGggPT0gQ2FuY2VsUGF0aCkgPT0gKG1f
c3RhZ2UgPT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkpOworCisgICAgTW9ub3RvbmljVGltZSBh
ZnRlciB7IH07CisgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKKyAg
ICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgICAgICBpZiAoT3B0aW9u
czo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKSkgeworICAgICAgICAgICAgaWYgKGlzRlRMKCkp
IHsKKyAgICAgICAgICAgICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3Jl
OworICAgICAgICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3Jl
RlRMIC0gYmVmb3JlOworICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBh
ZnRlciAtIG1fdGltZUJlZm9yZUZUTDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSgpID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgICAgICAgICAgdG90YWxCYXNl
bGluZUNvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY29uc3QgY2hhciogcGF0aE5hbWUgPSBudWxscHRyOworICAgIHN3
aXRjaCAocGF0aCkgeworICAgIGNhc2UgRmFpbFBhdGg6CisgICAgICAgIHBhdGhOYW1lID0gIk4v
QSAoZmFpbCkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJhc2VsaW5lUGF0aDoKKyAgICAg
ICAgcGF0aE5hbWUgPSAiQmFzZWxpbmUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERGR1Bh
dGg6CisgICAgICAgIHBhdGhOYW1lID0gIkRGRyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RlRMUGF0aDoKKyAgICAgICAgcGF0aE5hbWUgPSAiRlRMIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDYW5jZWxQYXRoOgorICAgICAgICBwYXRoTmFtZSA9ICJDYW5jZWxlZCI7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAobV9jb2RlQmxvY2spIHsgLy8gbV9j
b2RlQmxvY2sgd2lsbCBiZSBudWxsIGlmIHRoZSBjb21waWxhdGlvbiB3YXMgY2FuY2VsbGVkLgor
ICAgICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQorICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChtX2NvZGVCbG9jaywgImZ0bENvbXBpbGUiLCAoInRvb2sgIiwgKGFmdGVyIC0gYmVmb3Jl
KS5taWxsaXNlY29uZHMoKSwgIiBtcyAoREZHOiAiLCAobV90aW1lQmVmb3JlRlRMIC0gYmVmb3Jl
KS5taWxsaXNlY29uZHMoKSwgIiwgQjM6ICIsIChhZnRlciAtIG1fdGltZUJlZm9yZUZUTCkubWls
bGlzZWNvbmRzKCksICIpIHdpdGggIiwgcGF0aE5hbWUpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRmZ0NvbXBpbGUiLCAoInRv
b2sgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcyB3aXRoICIsIHBhdGhO
YW1lKSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShyZXBvcnRDb21waWxlVGltZXMoKSkpIHsK
KyAgICAgICAgZGF0YUxvZygiT3B0aW1pemVkICIsIGNvZGVCbG9ja05hbWUsICIgdXNpbmcgIiwg
bV9tb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW50byAiLCBjb2RlU2l6ZSgpLCAiIGJ5dGVz
IGluICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKKyAgICAgICAg
aWYgKHBhdGggPT0gRlRMUGF0aCkKKyAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCAobV90
aW1lQmVmb3JlRlRMIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiwgQjM6ICIsIChhZnRlciAt
IG1fdGltZUJlZm9yZUZUTCkubWlsbGlzZWNvbmRzKCksICIpIik7CisgICAgICAgIGRhdGFMb2co
Ii5cbiIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY4
NzU3OGI5YjU5YWIzNWMzODVlMzNmODAwOGRiMTEzNzk5NjE2YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5oCkBAIC0wLDAgKzEsMTAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKKyNp
bmNsdWRlICJKSVRDb21waWxhdGlvbktleS5oIgorI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9uTW9k
ZS5oIgorI2luY2x1ZGUgIkpJVFBsYW5TdGFnZS5oIgorI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNj
ZXNzU2NvcGUuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9TaGFyZWRUYXNrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgQ29k
ZUJsb2NrOworY2xhc3MgSklUV29ya2xpc3RUaHJlYWQ7CitjbGFzcyBWTTsKKworY2xhc3MgSklU
UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRQbGFuPiB7Citwcm90ZWN0ZWQ6
CisgICAgSklUUGxhbihKSVRDb21waWxhdGlvbk1vZGUsIENvZGVCbG9jayopOworCitwdWJsaWM6
CisgICAgdmlydHVhbCB+SklUUGxhbigpIHsgfQorCisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1
cm4gbV92bTsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2s7IH0KKyAgICBKSVRXb3JrbGlzdFRocmVhZCogdGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWQ7IH0KKworICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CisKKyAgICBKSVRQbGFuU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3N0YWdlOyB9CisgICAgYm9vbCBpc0ZUTCgpIGNvbnN0IHsgcmV0dXJuIDo6SlNDOjppc0ZU
TChtX21vZGUpOyB9CisKKyAgICBlbnVtIGNsYXNzIFRpZXIgeyBCYXNlbGluZSA9IDAsIERGRyA9
IDEsIEZUTCA9IDIsIENvdW50ID0gMyB9OworICAgIFRpZXIgdGllcigpIGNvbnN0OworCisgICAg
SklUQ29tcGlsYXRpb25LZXkga2V5KCk7CisKKyAgICB2b2lkIGNvbXBpbGVJblRocmVhZChKSVRX
b3JrbGlzdFRocmVhZCopOworCisgICAgdmlydHVhbCBzaXplX3QgY29kZVNpemUoKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplKCkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplSW5HQygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUNvbXBpbGluZygpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlSZWFkeSgpOworICAgIHZp
cnR1YWwgdm9pZCBjYW5jZWwoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0tub3duVG9CZUxpdmVB
ZnRlckdDKCk7CisgICAgdmlydHVhbCBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgU2hhcmVkVGFzazx2b2lkKENvZGVCbG9jayopPiYpOwor
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGNvbXB1dGVDb21waWxlVGltZXMo
KSBjb25zdDsKKyAgICBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0OworCisgICAgZW51
bSBDb21waWxhdGlvblBhdGggeyBGYWlsUGF0aCwgQmFzZWxpbmVQYXRoLCBERkdQYXRoLCBGVExQ
YXRoLCBDYW5jZWxQYXRoIH07CisgICAgdmlydHVhbCBDb21waWxhdGlvblBhdGggY29tcGlsZUlu
VGhyZWFkSW1wbCgpID0gMDsKKworICAgIEpJVFBsYW5TdGFnZSBtX3N0YWdlIHsgSklUUGxhblN0
YWdlOjpQcmVwYXJpbmcgfTsKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOworICAgIE1v
bm90b25pY1RpbWUgbV90aW1lQmVmb3JlRlRMOworICAgIFZNKiBtX3ZtOworICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgSklUV29ya2xpc3RUaHJlYWQqIG1fdGhyZWFkIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuU3RhZ2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRiMmZm
NGVmMmNhYmE3ODIwN2U1NzZiZWJmM2I5NzMzNmRhNjgyZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmgKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgSklUUGxhblN0YWdlIHsKKyAgICBQ
cmVwYXJpbmcsCisgICAgQ29tcGlsaW5nLAorICAgIFJlYWR5LAorICAgIENhbmNlbGVkLAorfTsK
KworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2FmZXBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2Fm
ZXBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2Q5ODU5NjhhOGQyNmRmMmY0MDNkODcyNDU0NGEyZDAz
OTU2YzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
YWZlcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpJVFNhZmVwb2ludC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVFBsYW4u
aCIKKyNpbmNsdWRlICJKSVRTY2FubmFibGUuaCIKKyNpbmNsdWRlICJKSVRXb3JrbGlzdFRocmVh
ZC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTYWZl
cG9pbnQ6OlJlc3VsdDo6flJlc3VsdCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV93YXNDaGVj
a2VkKTsKK30KKworYm9vbCBTYWZlcG9pbnQ6OlJlc3VsdDo6ZGlkR2V0Q2FuY2VsbGVkKCkKK3sK
KyAgICBtX3dhc0NoZWNrZWQgPSB0cnVlOworICAgIHJldHVybiBtX2RpZEdldENhbmNlbGxlZDsK
K30KKworU2FmZXBvaW50OjpTYWZlcG9pbnQoSklUUGxhbiYgcGxhbiwgUmVzdWx0JiByZXN1bHQp
CisgICAgOiBtX3ZtKHBsYW4udm0oKSkKKyAgICAsIG1fcGxhbihwbGFuKQorICAgICwgbV9kaWRD
YWxsQmVnaW4oZmFsc2UpCisgICAgLCBtX3Jlc3VsdChyZXN1bHQpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7CisgICAgcmVzdWx0Lm1fd2FzQ2hlY2tlZCA9IGZh
bHNlOworICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IGZhbHNlOworfQorCitTYWZlcG9p
bnQ6On5TYWZlcG9pbnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsK
KyAgICBpZiAoSklUV29ya2xpc3RUaHJlYWQqIHRocmVhZCA9IG1fcGxhbi50aHJlYWQoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPm1fc2FmZXBvaW50ID09IHRoaXMpOworICAg
ICAgICB0aHJlYWQtPm1fcmlnaHRUb1J1bi5sb2NrKCk7CisgICAgICAgIHRocmVhZC0+bV9zYWZl
cG9pbnQgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBTYWZlcG9pbnQ6OmFkZChTY2FubmFi
bGUqIHNjYW5uYWJsZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOwor
ICAgIG1fc2Nhbm5hYmxlcy5hcHBlbmQoc2Nhbm5hYmxlKTsKK30KKwordm9pZCBTYWZlcG9pbnQ6
OmJlZ2luKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOworICAgIG1f
ZGlkQ2FsbEJlZ2luID0gdHJ1ZTsKKyAgICBpZiAoSklUV29ya2xpc3RUaHJlYWQqIGRhdGEgPSBt
X3BsYW4udGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPm1fc2FmZXBv
aW50KTsKKyAgICAgICAgZGF0YS0+bV9zYWZlcG9pbnQgPSB0aGlzOworICAgICAgICBkYXRhLT5t
X3JpZ2h0VG9SdW4udW5sb2NrRmFpcmx5KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm47
IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQorICAgIAorICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQorICAg
ICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3RlbXBs
YXRlIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK2Jvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBp
ZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBX
ZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mg
d2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24u
CisgICAgCisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3du
VG9CZUxpdmVEdXJpbmdHQyhTbG90VmlzaXRvciYpOworCitib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBs
ZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2
ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFm
dGVyR0MoKTsKK30KKwordm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2Rp
ZEdldENhbmNlbGxlZCk7IC8vIFdlIGNhbm5vdCBnZXQgY2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ug
c3Vic2VxdWVudCBHQ3Mgd2lsbCB0aGluayB0aGF0IHdlJ3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwg
bm90IGRvIGFueXRoaW5nIHRvIHVzLgorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi5z
dGFnZSgpID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpOworICAgIG1fcmVzdWx0Lm1fZGlkR2V0
Q2FuY2VsbGVkID0gdHJ1ZTsKKyAgICBtX3ZtID0gbnVsbHB0cjsKK30KKworVk0qIFNhZmVwb2lu
dDo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZtOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU2FmZXBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNhZmVwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzMTMwOTcwYjgwNjcxMGIxZDlkZWM4MmUyYWY0MjEw
MWVjZDU5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNhZmVwb2ludC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQp
CisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
SVRQbGFuOworY2xhc3MgU2Nhbm5hYmxlOworY2xhc3MgVk07CisKK2NsYXNzIFNhZmVwb2ludCB7
CitwdWJsaWM6CisgICAgY2xhc3MgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc3Vs
dCgpCisgICAgICAgICAgICA6IG1fZGlkR2V0Q2FuY2VsbGVkKGZhbHNlKQorICAgICAgICAgICAg
LCBtX3dhc0NoZWNrZWQodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB+UmVzdWx0KCk7CisgICAgICAgIAorICAgICAgICBib29sIGRpZEdldENhbmNlbGxlZCgp
OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2FmZXBvaW50
OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2RpZEdldENhbmNlbGxlZDsKKyAgICAgICAgYm9v
bCBtX3dhc0NoZWNrZWQ7CisgICAgfTsKKyAgICAKKyAgICBTYWZlcG9pbnQoSklUUGxhbiYsIFJl
c3VsdCYpOworICAgIH5TYWZlcG9pbnQoKTsKKyAgICAKKyAgICB2b2lkIGFkZChTY2FubmFibGUq
KTsKKyAgICAKKyAgICB2b2lkIGJlZ2luKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZp
c2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKKyAgICB2b2lkIGNh
bmNlbCgpOworICAgIAorICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYg
d2UndmUgYmVlbiBjYW5jZWxsZWQuCisKK3ByaXZhdGU6CisgICAgVk0qIG1fdm07CisgICAgSklU
UGxhbiYgbV9wbGFuOworICAgIFZlY3RvcjxTY2FubmFibGUqPiBtX3NjYW5uYWJsZXM7CisgICAg
Ym9vbCBtX2RpZENhbGxCZWdpbjsKKyAgICBSZXN1bHQmIG1fcmVzdWx0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTY2FubmFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2Nhbm5hYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2NmQ5M2VmMWMzMjkxOTgyYjViNGNh
NzhkMTQyOWY3OWRhNmJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2Nhbm5hYmxlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgU2Nhbm5hYmxlIHsKK3B1YmxpYzoKKyAgICBT
Y2FubmFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAppbmRleCBhOTY4OTc0YmQ2YTk4MjNiOTBhYWRjNDRh
NDE0YTUzN2E5MDNjZjdhLi42MWIyNzBhNGMwZjcyMDEyYzUwYzUwYTljYTQ0ZjgxOTlhYmNmODM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDI5
NiArMjgsMzI0IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiSklULmgiCisjaW5j
bHVkZSAiSklUU2FmZXBvaW50LmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogI2luY2x1ZGUg
PHd0Zi9Db21waWxhdGlvblRocmVhZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSklU
V29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6
OlBsYW4+IHsKLXB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIHsKLSAgICAgICAgbV9qaXQuZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUluVGhyZWFkKCkKLSAgICB7Ci0gICAgICAgIG1faml0LmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgCi0gICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nID0g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZShib29sIG5lZWRzRmVuY2UpCi0g
ICAgewotICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZCgpOwotICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIENv
bXBpbGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwotICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxh
dGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24g
PSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDoKLSAgICAgICAgICAgIGlmIChuZWVkc0ZlbmNlKQotICAgICAgICAgICAgICAgIFdU
Rjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
bV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsg
fQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9Ci0gICAgCi0gICAg
Ym9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX2xvY2sgfTsKLSAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU9uTWFpblRocmVhZE5vdyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAg
IHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7Ci0gICAgICAgIHBsYW4uZmluYWxp
emUoZmFsc2UpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKLSAgICBKSVQgbV9qaXQ7Ci0gICAgTG9jayBtX2xvY2s7Ci0gICAgYm9vbCBtX2lzRmlu
aXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgSklUV29ya2xpc3Q6OlRocmVh
ZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewotcHVibGljOgotICAgIFRocmVhZChj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKSVRXb3JrbGlzdCYgd29ya2xpc3QpCi0gICAg
ICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwgd29ya2xpc3QubV9sb2NrLCB3b3JrbGlzdC5t
X2NvbmRpdGlvbi5jb3B5UmVmKCkpCi0gICAgICAgICwgbV93b3JrbGlzdCh3b3JrbGlzdCkKLSAg
ICB7Ci0gICAgICAgIG1fd29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKys7Ci0gICAgfQor
SklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0KCkKKyAgICA6IG1fbG9jayhCb3g8VW5jaGVja2VkTG9j
az46OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjpjcmVhdGUoKSkKK3sKKyAgICBtX21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxh
dGlvbnNQZXJUaWVyID0geworICAgICAgICBPcHRpb25zOjpudW1iZXJPZldvcmtsaXN0VGhyZWFk
cygpLAorICAgICAgICBPcHRpb25zOjpudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpLAorICAg
ICAgICBPcHRpb25zOjpudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLAorICAgIH07CiAKLSAg
ICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgZmluYWwKLSAgICB7Ci0jaWYgT1MoTElOVVgpCi0g
ICAgICAgIHJldHVybiAiSklUV29ya2VyIjsKLSNlbHNlCi0gICAgICAgIHJldHVybiAiSklUIFdv
cmtsaXN0IEhlbHBlciBUaHJlYWQiOwotI2VuZGlmCi0gICAgfQotICAgIAotcHJpdmF0ZToKLSAg
ICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbAotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV93b3JrbGlzdC5tX251bUF2YWlsYWJsZVRocmVhZHMpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fd29ya2xpc3QubV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKLSAgICAgICAgCi0gICAgICAgIG1fbXlQ
bGFucyA9IFdURk1vdmUobV93b3JrbGlzdC5tX3F1ZXVlKTsKLSAgICAgICAgbV93b3JrbGlzdC5t
X251bUF2YWlsYWJsZVRocmVhZHMtLTsKLSAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7
Ci0gICAgfQotICAgIAotICAgIFdvcmtSZXN1bHQgd29yaygpIGZpbmFsCi0gICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9teVBsYW5zLmlzRW1wdHkoKSk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKFJlZlB0cjxQbGFuPiYgcGxhbiA6IG1fbXlQbGFucykgewotICAgICAgICAgICAgcGxh
bi0+Y29tcGlsZUluVGhyZWFkKCk7Ci0gICAgICAgICAgICBwbGFuID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1haW4gdGhyZWFkIHJl
YWxpemVzIHRoYXQgd2UganVzdCBjb21waWxlZCBzb21ldGhpbmcuIE5vdGlmeWluZwotICAgICAg
ICAgICAgLy8gYSBjb25kaXRpb24gaXMgYmFzaWNhbGx5IGZyZWUgaWYgbm9ib2R5IGlzIHdhaXRp
bmcuCi0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07Ci0g
ICAgICAgICAgICBtX3dvcmtsaXN0Lm1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9teVBsYW5zLmNsZWFyKCk7Ci0gICAgICAgIAot
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgIG1f
d29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKys7Ci0gICAgICAgIHJldHVybiBXb3JrUmVz
dWx0OjpDb250aW51ZTsKLSAgICB9CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZXb3JrbGlzdFRocmVh
ZHMoKTsgKytpKQorICAgICAgICBtX3RocmVhZHMuYXBwZW5kKG5ldyBKSVRXb3JrbGlzdFRocmVh
ZChsb2NrZXIsICp0aGlzKSk7Cit9CiAKLSAgICB2b2lkIHRocmVhZERpZFN0YXJ0KCkgZmluYWwK
LSAgICB7Ci0gICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IG1ha2VVbmlxdWU8Q29tcGlsYXRp
b25TY29wZT4oKTsKK0pJVFdvcmtsaXN0Ojp+SklUV29ya2xpc3QoKQoreworICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOworfQorCitzdGF0aWMgSklUV29ya2xpc3QqIHRoZUdsb2JhbEpJ
VFdvcmtsaXN0IHsgbnVsbHB0ciB9OworCitKSVRXb3JrbGlzdCogSklUV29ya2xpc3Q6OmV4aXN0
aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKQoreworICAgIHJldHVybiB0aGVHbG9iYWxKSVRXb3Jr
bGlzdDsKK30KKworSklUV29ya2xpc3QmIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlz
dCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29u
Y2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIGF1dG8qIHdvcmts
aXN0ID0gbmV3IEpJVFdvcmtsaXN0KCk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICAgICAgdGhlR2xvYmFsSklUV29ya2xpc3QgPSB3b3JrbGlzdDsKKyAgICAg
ICAgfSk7CisgICAgcmV0dXJuICp0aGVHbG9iYWxKSVRXb3JrbGlzdDsKK30KKworQ29tcGlsYXRp
b25SZXN1bHQgSklUV29ya2xpc3Q6OmVucXVldWUoUmVmPEpJVFBsYW4+JiYgcGxhbikKK3sKKyAg
ICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgeworICAgICAgICBwbGFuLT5jb21w
aWxlSW5UaHJlYWQobnVsbHB0cik7CisgICAgICAgIHJldHVybiBwbGFuLT5maW5hbGl6ZSgpOwog
ICAgIH0KLSAgICAKLSAgICB2b2lkIHRocmVhZElzU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gbnVsbHB0cjsK
KworICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXplICIs
IHBsYW4tPmtleSgpLCAiXG4iKTsKICAgICB9CisgICAgQVNTRVJUKG1fcGxhbnMuZmluZChwbGFu
LT5rZXkoKSkgPT0gbV9wbGFucy5lbmQoKSk7CisgICAgbV9wbGFucy5hZGQocGxhbi0+a2V5KCks
IHBsYW4uY29weVJlZigpKTsKKyAgICBtX3F1ZXVlc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocGxh
bi0+dGllcigpKV0uYXBwZW5kKFdURk1vdmUocGxhbikpOworICAgIG1fcGxhbkVucXVldWVkLT5u
b3RpZnlPbmUobG9ja2VyKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25EZWZlcnJlZDsKK30KIAot
ICAgIEpJVFdvcmtsaXN0JiBtX3dvcmtsaXN0OwotICAgIFBsYW5zIG1fbXlQbGFuczsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb25TY29wZT4gbV9jb21waWxhdGlvblNjb3BlOwotfTsK
K3NpemVfdCBKSVRXb3JrbGlzdDo6cXVldWVMZW5ndGgoKSBjb25zdAoreworICAgIExvY2tlciBs
b2NrZXIgeyAqbV9sb2NrIH07CisgICAgcmV0dXJuIHF1ZXVlTGVuZ3RoKGxvY2tlcik7Cit9CiAK
LUpJVFdvcmtsaXN0OjpKSVRXb3JrbGlzdCgpCi0gICAgOiBtX2xvY2soQm94PFVuY2hlY2tlZExv
Y2s+OjpjcmVhdGUoKSkKLSAgICAsIG1fY29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bjo6Y3JlYXRlKCkpCitzaXplX3QgSklUV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJikgY29uc3QKK3sKKyAgICBzaXplX3QgcXVldWVMZW5ndGggPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxhbjo6VGll
cjo6Q291bnQpOyArK2kpCisgICAgICAgIHF1ZXVlTGVuZ3RoICs9IG1fcXVldWVzW2ldLnNpemUo
KTsKKyAgICByZXR1cm4gcXVldWVMZW5ndGg7Cit9CisKK3ZvaWQgSklUV29ya2xpc3Q6OnN1c3Bl
bmRBbGxUaHJlYWRzKCkKK3sKKyAgICBtX3N1c3BlbnNpb25Mb2NrLmxvY2soKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3RocmVhZHNb
aV0tPm1fcmlnaHRUb1J1bi5sb2NrKCk7Cit9CisKK3ZvaWQgSklUV29ya2xpc3Q6OnJlc3VtZUFs
bFRocmVhZHMoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGkt
LTspCisgICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLnVubG9jaygpOworICAgIG1f
c3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7Cit9CisKK2F1dG8gSklUV29ya2xpc3Q6OmNvbXBpbGF0
aW9uU3RhdGUoSklUQ29tcGlsYXRpb25LZXkga2V5KSAtPiBTdGF0ZQogewogICAgIExvY2tlciBs
b2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgbV90aHJlYWQgPSBuZXcgVGhyZWFkKGxvY2tlciwgKnRo
aXMpOworICAgIGNvbnN0IGF1dG8mIGl0ZXIgPSBtX3BsYW5zLmZpbmQoa2V5KTsKKyAgICBpZiAo
aXRlciA9PSBtX3BsYW5zLmVuZCgpKQorICAgICAgICByZXR1cm4gTm90S25vd247CisgICAgcmV0
dXJuIGl0ZXItPnZhbHVlLT5zdGFnZSgpID09IEpJVFBsYW5TdGFnZTo6UmVhZHkgPyBDb21waWxl
ZCA6IENvbXBpbGluZzsKIH0KIAotSklUV29ya2xpc3Q6On5KSVRXb3JrbGlzdCgpCithdXRvIEpJ
VFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIEpJVENvbXBpbGF0
aW9uS2V5IHJlcXVlc3RlZEtleSkgLT4gU3RhdGUKIHsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICBWZWN0b3I8UmVm
UHRyPEpJVFBsYW4+LCA4PiBteVJlYWR5UGxhbnM7CisgICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0Zv
clZNKHZtLCBteVJlYWR5UGxhbnMpOworCisgICAgU3RhdGUgcmVzdWx0aW5nU3RhdGUgPSBOb3RL
bm93bjsKKyAgICB3aGlsZSAoIW15UmVhZHlQbGFucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVm
UHRyPEpJVFBsYW4+IHBsYW4gPSBteVJlYWR5UGxhbnMudGFrZUxhc3QoKTsKKyAgICAgICAgSklU
Q29tcGlsYXRpb25LZXkgY3VycmVudEtleSA9IHBsYW4tPmtleSgpOworCisgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksICp0aGlzLCAiOiBDb21w
bGV0aW5nICIsIGN1cnJlbnRLZXkpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0
YWdlKCkgPT0gSklUUGxhblN0YWdlOjpSZWFkeSk7CisKKyAgICAgICAgcGxhbi0+ZmluYWxpemUo
KTsKKworICAgICAgICBpZiAoY3VycmVudEtleSA9PSByZXF1ZXN0ZWRLZXkpCisgICAgICAgICAg
ICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGVkOworICAgIH0KKworICAgIGlmICghIXJlcXVlc3Rl
ZEtleSAmJiByZXN1bHRpbmdTdGF0ZSA9PSBOb3RLbm93bikgeworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgKm1fbG9jayB9OworICAgICAgICBpZiAobV9wbGFucy5jb250YWlucyhyZXF1ZXN0ZWRL
ZXkpKQorICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxpbmc7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdGluZ1N0YXRlOwogfQogCi1ib29sIEpJVFdvcmtsaXN0Ojpjb21wbGV0
ZUFsbEZvclZNKFZNJiB2bSkKKwordm9pZCBKSVRXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNG
b3JWTUFyZVJlYWR5KFZNJiB2bSkKIHsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKworICAgIC8vIFdoaWxlIHdlIGFyZSB3YWl0aW5nIGZv
ciB0aGUgY29tcGlsZXIgdG8gZmluaXNoLCB0aGUgY29sbGVjdG9yIG1pZ2h0IGhhdmUgYWxyZWFk
eSBzdXNwZW5kZWQKKyAgICAvLyB0aGUgY29tcGlsZXIgYW5kIHRoZW4gaXQgd2lsbCBiZSB3YWl0
aW5nIGZvciB1cyB0byBzdG9wLiBUaGF0J3MgYSBkZWFkbG9jay4gV2UgYXZvaWQgdGhhdAorICAg
IC8vIGRlYWRsb2NrIGJ5IHJlbGlucXVpc2hpbmcgb3VyIGhlYXAgYWNjZXNzLCBzbyB0aGF0IHRo
ZSBjb2xsZWN0b3IgcHJldGVuZHMgdGhhdCB3ZSBhcmUgc3RvcHBlZAorICAgIC8vIGV2ZW4gaWYg
d2UgYXJlbid0LgorICAgIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUgcmVsZWFzZUhlYXBBY2Nlc3NT
Y29wZSh2bS5oZWFwKTsKKworICAgIC8vIFdhaXQgZm9yIGFsbCBvZiB0aGUgcGxhbnMgZm9yIHRo
ZSBnaXZlbiBWTSB0byBjb21wbGV0ZS4gVGhlIGlkZWEgaGVyZQorICAgIC8vIGlzIHRoYXQgd2Ug
d2FudCBhbGwgb2YgdGhlIGNhbGxlciBWTSdzIHBsYW5zIHRvIGJlIGRvbmUuIFdlIGRvbid0IGNh
cmUKKyAgICAvLyBhYm91dCBhbnkgb3RoZXIgVk0ncyBwbGFucywgYW5kIHdlIHdvbid0IGF0dGVt
cHQgdG8gd2FpdCBvbiB0aG9zZS4KKyAgICAvLyBBZnRlciB3ZSByZWxlYXNlIHRoaXMgbG9jaywg
d2Uga25vdyB0aGF0IGFsdGhvdWdoIG90aGVyIFZNcyBtYXkgc3RpbGwKKyAgICAvLyBiZSBhZGRp
bmcgcGxhbnMsIG91ciBWTSB3aWxsIG5vdCBiZS4KKyAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9j
ayB9OworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAg
ICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIjog
V2FpdGluZyBmb3IgYWxsIGluIFZNIHRvIGNvbXBsZXRlLlxuIik7CisgICAgfQorCiAgICAgZm9y
ICg7OykgewotICAgICAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCAzMj4gbXlQbGFuczsKLSAgICAg
ICAgewotICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgICAg
IGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBib29sIGRpZEZpbmRVbmZpbmlzaGVkUGxhbiA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIG1fcGxhbnMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAg
ICAgICAgICAgICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJnBsYW4tPnZtKCkgIT0gJnZtKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGxhbi0+
aXNGaW5pc2hlZENvbXBpbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlk
RmluZFVuZmluaXNoZWRQbGFuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBteVBsYW5zLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCBwbGFucyB0aGVuIHdlIHNob3Vs
ZCBmaW5hbGl6ZSB0aGVtIG5vdy4KLSAgICAgICAgICAgICAgICBpZiAoIW15UGxhbnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIHBsYW5zLCB0aGVuIHdlJ3JlIGVpdGhlciBk
b25lIG9yIHdlIG5lZWQgdG8gd2FpdCwgZGVwZW5kaW5nIG9uCi0gICAgICAgICAgICAgICAgLy8g
d2hldGhlciB3ZSBmb3VuZCBzb21lIHVuZmluaXNoZWQgcGxhbnMuCi0gICAgICAgICAgICAgICAg
aWYgKCFkaWRGaW5kVW5maW5pc2hlZFBsYW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24tPndh
aXQoKm1fbG9jayk7CisgICAgICAgIGJvb2wgYWxsQXJlQ29tcGlsZWQgPSB0cnVlOworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9wbGFucykgeworICAgICAgICAgICAgaWYgKGVu
dHJ5LnZhbHVlLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS52YWx1ZS0+c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OlJlYWR5KSB7
CisgICAgICAgICAgICAgICAgYWxsQXJlQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW15UGxhbnMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsK
LSAgICAgICAgZmluYWxpemVQbGFucyhteVBsYW5zKTsKKworICAgICAgICBpZiAoYWxsQXJlQ29t
cGlsZWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX3BsYW5Db21waWxlZC53YWl0
KCptX2xvY2spOwogICAgIH0KIH0KIAotdm9pZCBKSVRXb3JrbGlzdDo6cG9sbChWTSYgdm0pCit2
b2lkIEpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mIHZtKQogewogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBQbGFucyBteVBsYW5zOwotICAgIHsKLSAgICAg
ICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgbV9wbGFucy5yZW1vdmVBbGxN
YXRjaGluZygKLSAgICAgICAgICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCZwbGFuLT52bSgpICE9ICZ2bSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghcGxhbi0+aXNGaW5pc2hlZENvbXBpbGlu
ZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
bXlQbGFucy5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgZmluYWxpemVQbGFucyhteVBs
YW5zKTsKKyAgICB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkodm0pOworICAgIGNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAotdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGls
ZUxhdGVyKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCit2b2lkIEpJVFdvcmtsaXN0OjpjYW5jZWxBbGxQbGFuc0ZvclZNKFZNJiB2
bSkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLmhlYXApOwotICAgIFJF
TEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bmspOwotICAgIAotICAgIGlmIChjb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9u
KSB7Ci0gICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkp
IHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU9uTWFpblRocmVhZE5vdyhjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICByZXR1cm47CisgICAgcmVtb3ZlTWF0Y2hp
bmdQbGFuc0ZvclZNKHZtLCBbJl0oSklUUGxhbiYgcGxhbikgeworICAgICAgICByZXR1cm4gcGxh
bi5zdGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6Q29tcGlsaW5nOworICAgIH0pOworCisgICAgd2Fp
dFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsKKworICAgIFZlY3RvcjxSZWZQdHI8SklU
UGxhbj4sIDg+IG15UmVhZHlQbGFuczsKKyAgICByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0odm0s
IG15UmVhZHlQbGFucyk7Cit9CisKK3ZvaWQgSklUV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhW
TSYgdm0pCit7CisgICAgcmVtb3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKHZtLCBbJl0oSklUUGxhbiYg
cGxhbikgeworICAgICAgICBpZiAoIXBsYW4uaXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHBsYW4uZmluYWxpemVJbkdDKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKworICAgIC8vIE5vIGxvY2tpbmcgbmVlZGVkIGZv
ciB0aGlzIHBhcnQsIHNlZSBjb21tZW50IGluIHZpc2l0V2Vha1JlZmVyZW5jZXMoKS4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFNhZmVw
b2ludCogc2FmZXBvaW50ID0gbV90aHJlYWRzW2ldLmdldCgpLT5tX3NhZmVwb2ludDsKKyAgICAg
ICAgaWYgKCFzYWZlcG9pbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNh
ZmVwb2ludC0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KHNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAgICAgfQotICAgIAotICAgIGNvZGVC
bG9jay0+aml0U29vbigpOworfQogCit1bnNpZ25lZCBKSVRXb3JrbGlzdDo6c2V0TWF4aW11bU51
bWJlck9mQ29uY3VycmVudERGR0NvbXBpbGF0aW9ucyh1bnNpZ25lZCBuKQoreworICAgIHVuc2ln
bmVkIG9sZFZhbHVlID0gbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVy
VGllcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxhbjo6VGllcjo6REZHKV07CisgICAgbV9t
YXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllcltzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSklUUGxhbjo6VGllcjo6REZHKV0gPSBuOworICAgIHJldHVybiBvbGRWYWx1ZTsK
K30KKwordW5zaWduZWQgSklUV29ya2xpc3Q6OnNldE1heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRG
VExDb21waWxhdGlvbnModW5zaWduZWQgbikKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IG1f
bWF4aW11bU51bWJlck9mQ29uY3VycmVudENvbXBpbGF0aW9uc1BlclRpZXJbc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpJVFBsYW46OlRpZXI6OkZUTCldOworICAgIG1fbWF4aW11bU51bWJlck9mQ29u
Y3VycmVudENvbXBpbGF0aW9uc1BlclRpZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpJVFBsYW46
OlRpZXI6OkZUTCldID0gbjsKKyAgICByZXR1cm4gb2xkVmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpJVFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwog
ICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX3BsYW5uZWQuY29udGFpbnMoY29kZUJsb2NrKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX251bUF2YWlsYWJsZVRocmVhZHMpIHsKLSAgICAg
ICAgICAgIG1fcGxhbm5lZC5hZGQoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KSk7Ci0gICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKLSAgICAgICAgICAg
IG1fcXVldWUuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlmeUFs
bChsb2NrZXIpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbV9wbGFucykgeworICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT52bSgpICE9IHZtKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZW50cnkudmFsdWUtPmNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgICAgICB9CiAgICAgfQotCi0g
ICAgLy8gQ29tcGlsaW5nIG9uIHRoZSBtYWluIHRocmVhZCBpZiB0aGUgaGVscGVyIHRocmVhZCBp
c24ndCBhdmFpbGFibGUgaXMgYSBkZWZlbnNlIGFnYWluc3QgdGhpcwotICAgIC8vIHBhdGhvbG9n
eToKLSAgICAvLwotICAgIC8vIDEpIERvIHNvbWV0aGluZyB0aGF0IGlzIGFsbG93ZWQgdG8gdGFr
ZSBhIHdoaWxlLCBsaWtlIGxvYWQgYSBnaWFudCBwaWVjZSBvZiBpbml0aWFsaXphdGlvbgotICAg
IC8vICAgIGNvZGUuIFRoaXMgcGxhbnMgdGhlIGNvbXBpbGUgb2YgdGhlIGluaXQgY29kZSwgYnV0
IGRvZXNuJ3QgZmluaXNoIGl0LiBJdCB3aWxsIHRha2UgYQotICAgIC8vICAgIHdoaWxlLgotICAg
IC8vCi0gICAgLy8gMikgRG8gc29tZXRoaW5nIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgcXVpY2su
IE5vdyBhbGwgYmFzZWxpbmUgY29tcGlsZXMsIGFuZCBzbyBhbGwgREZHIGFuZAotICAgIC8vICAg
IEZUTCBjb21waWxlcywgb2YgZXZlcnl0aGluZyBpcyBibG9ja2VkIG9uIHRoZSBsb25nLXJ1bm5p
bmcgYmFzZWxpbmUgY29tcGlsZSBvZiB0aGF0Ci0gICAgLy8gICAgaW5pdGlhbGl6YXRpb24gY29k
ZS4KLSAgICAvLwotICAgIC8vIFRoZSBzaW5nbGUtdGhyZWFkZWQgY29uY3VycmVudCBKSVQgaGFz
IHRoaXMgdGVuZGVuY3kgdG8gY29udm95IGV2ZXJ5dGhpbmcgd2hpbGUgYXQgdGhlIHNhbWUKLSAg
ICAvLyB0aW1lIHBvc3Rwb25pbmcgd2hlbiBpdCBoYXBwZW5zLCB3aGljaCBtZWFucyB0aGF0IHRo
ZSBjb252b3kgZGVsYXlzIGFyZSBsZXNzIHByZWRpY3RhYmxlLgotICAgIC8vIFRoaXMgd29ya3Mg
YXJvdW5kIHRoZSBpc3N1ZS4gSWYgdGhlIGNvbmN1cnJlbnQgSklUIHRocmVhZCBpcyBjb252b3ll
ZCwgd2UgcmV2ZXJ0IHRvIG1haW4KLSAgICAvLyB0aHJlYWQgY29tcGlsZXMuIFRoaXMgaXMgcHJv
YmFibHkgbm90IGFzIGdvb2QgYXMgaWYgd2UgaGFkIG11bHRpcGxlIEpJVCB0aHJlYWRzLiBNYXli
ZSB3ZQotICAgIC8vIGNhbiBkbyB0aGF0IHNvbWVkYXkuCi0gICAgUGxhbjo6Y29tcGlsZU9uTWFp
blRocmVhZE5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIC8v
IFRoaXMgbG9vcCBkb2Vzbid0IG5lZWQgbG9ja2luZyBiZWNhdXNlOgorICAgIC8vICgxKSBubyBu
ZXcgdGhyZWFkcyBjYW4gYmUgYWRkZWQgdG8gbV90aHJlYWRzLiBIZW5jZSwgaXQgaXMgaW1tdXRh
YmxlIGFuZCBuZWVkcyBubyBsb2Nrcy4KKyAgICAvLyAoMikgSklUV29ya2xpc3RUaHJlYWQ6Om1f
c2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1fcmlnaHRUb1J1biB3aGlj
aCB3ZSBtdXN0IGJlCisgICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNhdXNlIG9mIGEgcHJpb3Ig
Y2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhy
ZWFkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQgPSBtX3Ro
cmVhZHNbaV0tPm1fc2FmZXBvaW50OworICAgICAgICBpZiAoc2FmZXBvaW50ICYmIHNhZmVwb2lu
dC0+dm0oKSA9PSB2bSkKKyAgICAgICAgICAgIHNhZmVwb2ludC0+Y2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgfQogfQordGVtcGxhdGUgdm9pZCBKSVRXb3JrbGlz
dDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2
b2lkIEpJVFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKLXZv
aWQgSklUV29ya2xpc3Q6OmZpbmFsaXplUGxhbnMoUGxhbnMmIG15UGxhbnMpCit2b2lkIEpJVFdv
cmtsaXN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yIChSZWZQdHI8
UGxhbj4mIHBsYW4gOiBteVBsYW5zKSB7Ci0gICAgICAgIHBsYW4tPmZpbmFsaXplKHRydWUpOwot
ICAgICAgICAKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgbV9w
bGFubmVkLnJlbW92ZShwbGFuLT5jb2RlQmxvY2soKSk7Ci0gICAgfQorICAgIExvY2tlciBsb2Nr
ZXIgeyAqbV9sb2NrIH07CisgICAgZHVtcChsb2NrZXIsIG91dCk7CiB9CiAKLXN0YXRpYyBKSVRX
b3JrbGlzdCogdGhlR2xvYmFsSklUV29ya2xpc3QgeyBudWxscHRyIH07Cit2b2lkIEpJVFdvcmts
aXN0OjpkdW1wKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICAiSklUV29ya2xpc3QoIiwgUmF3UG9p
bnRlcih0aGlzKSwgIilbUXVldWUgTGVuZ3RoID0gIiwgcXVldWVMZW5ndGgobG9ja2VyKSwKKyAg
ICAgICAgIiwgTWFwIFNpemUgPSAiLCBtX3BsYW5zLnNpemUoKSwgIiwgTnVtIFJlYWR5ID0gIiwg
bV9yZWFkeVBsYW5zLnNpemUoKSwKKyAgICAgICAgIiwgTnVtIEFjdGl2ZSBUaHJlYWRzID0gIiwg
bV9udW1iZXJPZkFjdGl2ZVRocmVhZHMsICIvIiwgbV90aHJlYWRzLnNpemUoKSwgIl0iKTsKK30K
IAotSklUV29ya2xpc3QqIEpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxs
KCkKK3ZvaWQgSklUV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZl
Y3RvcjxSZWZQdHI8SklUUGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCiB7Ci0gICAgcmV0dXJuIHRo
ZUdsb2JhbEpJVFdvcmtsaXN0OworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBM
b2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9y
ZWFkeVBsYW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxKSVRQbGFuPiBwbGFuID0g
bV9yZWFkeVBsYW5zW2ldOworICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHBsYW4tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdl
OjpSZWFkeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBteVJlYWR5UGxhbnMuYXBw
ZW5kKHBsYW4pOworICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5sYXN0
KCk7CisgICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fcGxhbnMu
cmVtb3ZlKHBsYW4tPmtleSgpKTsKKyAgICB9CiB9CiAKLUpJVFdvcmtsaXN0JiBKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKQordGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlv
bj4KK3ZvaWQgSklUV29ya2xpc3Q6OnJlbW92ZU1hdGNoaW5nUGxhbnNGb3JWTShWTSYgdm0sIGNv
bnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpCiB7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2U7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2UsCi0gICAgICAgIFtdIHsK
LSAgICAgICAgICAgIGF1dG8qIHdvcmtsaXN0ID0gbmV3IEpJVFdvcmtsaXN0KCk7Ci0gICAgICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgdGhlR2xvYmFsSklUV29y
a2xpc3QgPSB3b3JrbGlzdDsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuICp0aGVHbG9iYWxKSVRX
b3JrbGlzdDsKKyAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OworICAgIEhhc2hTZXQ8SklU
Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9w
bGFucykgeworICAgICAgICBKSVRQbGFuKiBwbGFuID0gZW50cnkudmFsdWUuZ2V0KCk7CisgICAg
ICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoIW1hdGNoZXMoKnBsYW4pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCk7Cisg
ICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOworICAgIH0KKyAgICBmb3IgKEpJ
VENvbXBpbGF0aW9uS2V5IGtleSA6IGRlYWRQbGFuS2V5cykKKyAgICAgICAgbV9wbGFucy50YWtl
KGtleSktPmNhbmNlbCgpOworICAgIGZvciAoYXV0byYgcXVldWUgOiBtX3F1ZXVlcykgeworICAg
ICAgICBEZXF1ZTxSZWZQdHI8SklUUGxhbj4+IG5ld1F1ZXVlOworICAgICAgICB3aGlsZSAoIXF1
ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPEpJVFBsYW4+IHBsYW4gPSBxdWV1
ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIGlmIChwbGFuLT5zdGFnZSgpICE9IEpJVFBsYW5T
dGFnZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAgICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOwor
ICAgICAgICB9CisgICAgICAgIHF1ZXVlLnN3YXAobmV3UXVldWUpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChtX3JlYWR5UGxhbnNbaV0tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVh
ZHlQbGFucy5sYXN0KCk7CisgICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7CisgICAg
fQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29y
a2xpc3QuaAppbmRleCBhNzJhODM4NzBhMDA4MmZjZDM0NDk1MjkwZWE1MGVhMTQwZDg5ZjJmLi43
MmNjZTAwMGEzZDA5MjNmODRhZGMyODJhYzRiMGMwMTVhMWVlYWM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDE3ICsyMCwxNyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShKSVQpCiAKLSNpbmNsdWRlICJCeXRl
Y29kZUluZGV4LmgiCi0jaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUg
IkpJVFBsYW4uaCIKKyNpbmNsdWRlICJKSVRXb3JrbGlzdFRocmVhZC5oIgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ1LDM3ICs0NSw4NCBAQCBjbGFzcyBK
SVRXb3JrbGlzdCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSklUV29ya2xpc3QpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgY2xhc3MgUGxhbjsKLSAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8UGxhbj4sIDMyPiBQbGFuczsKLSAgICAKKyAgICBmcmllbmQgY2xhc3Mg
SklUV29ya2xpc3RUaHJlYWQ7CisKIHB1YmxpYzoKICAgICB+SklUV29ya2xpc3QoKTsKLSAgICAK
LSAgICBib29sIGNvbXBsZXRlQWxsRm9yVk0oVk0mKTsgLy8gUmV0dXJuIHRydWUgaWYgYW55IEpJ
VCB3b3JrIGhhcHBlbmVkLgotICAgIHZvaWQgcG9sbChWTSYpOwotICAgIAotICAgIHZvaWQgY29t
cGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwotICAgIAorCiAgICAgc3RhdGljIEpJVFdvcmtsaXN0
JiBlbnN1cmVHbG9iYWxXb3JrbGlzdCgpOwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCogZXhpc3Rp
bmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpOwotICAgIAorCisgICAgQ29tcGlsYXRpb25SZXN1bHQg
ZW5xdWV1ZShSZWY8SklUUGxhbj4mJik7CisgICAgc2l6ZV90IHF1ZXVlTGVuZ3RoKCkgY29uc3Q7
CisKKyAgICB2b2lkIHN1c3BlbmRBbGxUaHJlYWRzKCk7CisgICAgdm9pZCByZXN1bWVBbGxUaHJl
YWRzKCk7CisKKyAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQg
fTsKKyAgICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKEpJVENvbXBpbGF0aW9uS2V5KTsKKworICAg
IFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgSklUQ29tcGlsYXRpb25LZXkg
PSBKSVRDb21waWxhdGlvbktleSgpKTsKKworICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JW
TUFyZVJlYWR5KFZNJik7CisKKyAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CisgICAgLy8g
d29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgLy8gd29y
a2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKKyAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOworCisgICAgdm9pZCBjYW5jZWxBbGxQbGFuc0ZvclZNKFZNJik7
CisKKyAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOworCisgICAgdW5zaWduZWQgc2V0TWF4
aW11bU51bWJlck9mQ29uY3VycmVudERGR0NvbXBpbGF0aW9ucyh1bnNpZ25lZCk7CisgICAgdW5z
aWduZWQgc2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudEZUTENvbXBpbGF0aW9ucyh1bnNpZ25l
ZCk7CisKKyAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVu
ZGluZyBhbGwgdGhyZWFkcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JH
QyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBKSVRXb3JrbGlzdCgpOwotICAgIAotICAgIGNs
YXNzIFRocmVhZDsKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwotICAgIAotICAgIHZvaWQgZmlu
YWxpemVQbGFucyhQbGFucyYpOwotICAgIAotICAgIFBsYW5zIG1fcXVldWU7Ci0gICAgUGxhbnMg
bV9wbGFuczsKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fcGxhbm5lZDsKLSAgICAKKworICAg
IHNpemVfdCBxdWV1ZUxlbmd0aChjb25zdCBBYnN0cmFjdExvY2tlciYpIGNvbnN0OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KKyAgICB2b2lkIHJlbW92ZU1hdGNoaW5n
UGxhbnNGb3JWTShWTSYsIGNvbnN0IE1hdGNoRnVuY3Rpb24mKTsKKworICAgIHZvaWQgcmVtb3Zl
QWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxKSVRQbGFuPiwgOD4mKTsKKwor
ICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJikgY29uc3Q7
CisKKyAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBzdGQ6
OmFycmF5PHVuc2lnbmVkLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEpJVFBsYW46OlRpZXI6OkNvdW50
KT4gbV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllciB7IDAsIDAsIDAgfTsKKyAgICBzdGQ6OmFy
cmF5PHVuc2lnbmVkLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEpJVFBsYW46OlRpZXI6OkNvdW50KT4g
bV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllcjsKKworICAgIFZl
Y3RvcjxSZWZQdHI8SklUV29ya2xpc3RUaHJlYWQ+PiBtX3RocmVhZHM7CisKKyAgICAvLyBVc2Vk
IHRvIGluZm9ybSB0aGUgdGhyZWFkIGFib3V0IHdoYXQgd29yayB0aGVyZSBpcyBsZWZ0IHRvIGRv
LgorICAgIHN0ZDo6YXJyYXk8RGVxdWU8UmVmUHRyPEpJVFBsYW4+Piwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fcXVldWVzOworCisgICAgLy8gVXNlZCB0byBh
bnN3ZXIgcXVlc3Rpb25zIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29kZSBibG9jay4g
VGhpcworICAgIC8vIGlzIHBhcnRpY3VsYXJseSBncmVhdCBmb3IgdGhlIGN0aV9vcHRpbWl6ZSBP
U1Igc2xvdyBwYXRoLCB3aGljaCB3YW50cworICAgIC8vIHRvIGtub3c6IGRpZCBJIGdldCBoZXJl
IGJlY2F1c2UgYSBiZXR0ZXIgdmVyc2lvbiBvZiBtZSBqdXN0IGdvdAorICAgIC8vIGNvbXBpbGVk
PworICAgIEhhc2hNYXA8SklUQ29tcGlsYXRpb25LZXksIFJlZlB0cjxKSVRQbGFuPj4gbV9wbGFu
czsKKworICAgIC8vIFVzZWQgdG8gcXVpY2tseSBmaW5kIHdoaWNoIHBsYW5zIGhhdmUgYmVlbiBj
b21waWxlZCBhbmQgYXJlIHJlYWR5IHRvCisgICAgLy8gYmUgY29tcGxldGVkLgorICAgIFZlY3Rv
cjxSZWZQdHI8SklUUGxhbj4sIDE2PiBtX3JlYWR5UGxhbnM7CisKKyAgICBVbmNoZWNrZWRMb2Nr
IG1fc3VzcGVuc2lvbkxvY2s7CiAgICAgQm94PFVuY2hlY2tlZExvY2s+IG1fbG9jazsKLSAgICBS
ZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX2NvbmRpdGlvbjsgLy8gV2UgdXNlIE9uZSBU
cnVlIENvbmRpdGlvbiBmb3IgZXZlcnl0aGluZyBiZWNhdXNlIHRoYXQncyBlYXNpZXIuCi0gICAg
UmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJlYWQ7Ci0gICAgCi0gICAgdW5zaWduZWQgbV9u
dW1BdmFpbGFibGVUaHJlYWRzIHsgMCB9OworCisgICAgUmVmPEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CisgICAgVW5jaGVja2VkQ29uZGl0aW9uIG1fcGxhbkNvbXBp
bGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdvcmtsaXN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXb3JrbGlzdElubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjVjMTg3Mzk1N2FkZWU5MjVh
YWU1NzZjN2I2M2ZjMWI3ODAzMzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdElubGluZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIEVO
QUJMRShKSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Cit2
b2lkIEpJVFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3Is
IFZNJiB2bSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9j
ayB9OworICAgIGF1dG8gZm4gPSBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoQ29kZUJsb2NrKik+KGZ1
bmMpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CisgICAgICAgIGlmIChlbnRy
eS52YWx1ZS0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZW50
cnkudmFsdWUtPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgZm4pOworICAgIH0KK30K
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFkLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
N2M4MDc3ODUwZjM4MWU4M2I2MTllYjllODZmNjBjMmQxN2M0MWFhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAKQEAgLTAs
MCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKwor
I2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgorI2luY2x1ZGUgIlZN
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRXb3JrbGlzdFRocmVhZDo6V29ya1Nj
b3BlIGZpbmFsIHsKK3B1YmxpYzoKKyAgICBXb3JrU2NvcGUoSklUV29ya2xpc3RUaHJlYWQmIHRo
cmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwgbV90aWVyKHRocmVh
ZC5tX3BsYW4tPnRpZXIoKSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFk
Lm1fcGxhbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFkLm1fd29ya2xpc3QubV9u
dW1iZXJPZkFjdGl2ZVRocmVhZHMpOworICAgIH0KKworICAgIH5Xb3JrU2NvcGUoKQorICAgIHsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3RocmVhZC5tX3dvcmtsaXN0Lm1fbG9jayB9Owor
ICAgICAgICBtX3RocmVhZC5tX3BsYW4gPSBudWxscHRyOworICAgICAgICBtX3RocmVhZC5tX3dv
cmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CisgICAgICAgIG1fdGhyZWFkLm1fd29y
a2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV90aWVyKV0tLTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSklUV29ya2xpc3RUaHJlYWQmIG1f
dGhyZWFkOworICAgIEpJVFBsYW46OlRpZXIgbV90aWVyOworfTsKKworSklUV29ya2xpc3RUaHJl
YWQ6OkpJVFdvcmtsaXN0VGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpJVFdv
cmtsaXN0JiB3b3JrbGlzdCkKKyAgICA6IEF1dG9tYXRpY1RocmVhZChsb2NrZXIsIHdvcmtsaXN0
Lm1fbG9jaywgd29ya2xpc3QubV9wbGFuRW5xdWV1ZWQuY29weVJlZigpLCBUaHJlYWRUeXBlOjpD
b21waWxlcikKKyAgICAsIG1fd29ya2xpc3Qod29ya2xpc3QpCit7Cit9Citjb25zdCBjaGFyKiBK
SVRXb3JrbGlzdFRocmVhZDo6bmFtZSgpIGNvbnN0Cit7CisjaWYgT1MoTElOVVgpCisgICAgcmV0
dXJuICJKSVRXb3JrZXIiOworI2Vsc2UKKyAgICByZXR1cm4gIkpJVCBXb3JrbGlzdCBIZWxwZXIg
VGhyZWFkIjsKKyNlbmRpZgorfQorCithdXRvIEpJVFdvcmtsaXN0VGhyZWFkOjpwb2xsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIC0+IFBvbGxSZXN1bHQKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpJVFBsYW46OlRpZXI6OkNvdW50
KTsgKytpKSB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gbV93b3JrbGlzdC5tX3F1ZXVlc1tpXTsK
KyAgICAgICAgaWYgKHF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisK
KyAgICAgICAgaWYgKG1fd29ya2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllcltpXSA+
PSBtX3dvcmtsaXN0Lm1fbWF4aW11bU51bWJlck9mQ29uY3VycmVudENvbXBpbGF0aW9uc1BlclRp
ZXJbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BsYW4gPSBxdWV1ZS50
YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3BsYW4pKSB7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAg
ICAgIG1fd29ya2xpc3QuZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiOiBUaHJlYWQgc2h1dHRpbmcgZG93blxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKKyAgICAgICAgfQorCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFuU3RhZ2U6OlByZXBh
cmluZyk7CisgICAgICAgIG1fd29ya2xpc3QubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAg
ICAgICAgbV93b3JrbGlzdC5tX29uZ29pbmdDb21waWxhdGlvbnNQZXJUaWVyW2ldKys7CisgICAg
ICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOworICAgIH0KKworICAgIHJldHVybiBQb2xsUmVz
dWx0OjpXYWl0OworfQorCithdXRvIEpJVFdvcmtsaXN0VGhyZWFkOjp3b3JrKCkgLT4gV29ya1Jl
c3VsdAoreworICAgIFdvcmtTY29wZSB3b3JrU2NvcGUoKnRoaXMpOworCisgICAgTG9ja2VyIGxv
Y2tlciB7IG1fcmlnaHRUb1J1biB9OworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7ICpt
X3dvcmtsaXN0Lm1fbG9jayB9OworICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IEpJVFBs
YW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGlu
dWU7CisgICAgICAgIG1fcGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7CisgICAgfQorCisKKyAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCBtX3dvcmtsaXN0
LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseSIpOworCisg
ICAgLy8gVGhlcmUncyBubyB3YXkgZm9yIHRoZSBHQyB0byBiZSBzYWZlcG9pbnRpbmcgc2luY2Ug
d2Ugb3duIHJpZ2h0VG9SdW4uCisgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3Rv
cHBlZCgpKSB7CisgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBh
cmUhICgxKVxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFkKHRoaXMpOworICAgIGlmIChtX3BsYW4tPnN0
YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkgeworICAgICAgICBpZiAobV9wbGFuLT52
bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkhlYXAg
aXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07CisgICAgICAgIGlmIChtX3Bs
YW4tPnN0YWdlKCkgPT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkKKyAgICAgICAgICAgIHJldHVy
biBXb3JrUmVzdWx0OjpDb250aW51ZTsKKworICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5KCk7
CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAg
ICAgICAgICAgIG1fd29ya2xpc3QuZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgICAgICBkYXRhTG9nKCI6IENvbXBpbGVkICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9u
b3VzbHlcbiIpOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+
dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKKyAgICAgICAgbV93b3JrbGlzdC5tX3JlYWR5
UGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CisgICAgICAgIG1fd29ya2xpc3QubV9wbGFu
Q29tcGlsZWQubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNv
bnRpbnVlOworfQorCit2b2lkIEpJVFdvcmtsaXN0VGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCit7
CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93
b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWQiKTsKKworfQorCit2b2lkIEpJVFdvcmtsaXN0VGhy
ZWFkOjp0aHJlYWRJc1N0b3BwaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCBtX3dvcmtsaXN0LCAi
OiBUaHJlYWQgd2lsbCBzdG9wIik7CisgICAgQVNTRVJUKCFtX3BsYW4pOworICAgIG1fcGxhbiA9
IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJl
YWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNjVlNDcxMDI3OTQ2ZWY4MWY2YjYwYTcwMGJlZmFkMDMzZDFiYzliCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVhZC5o
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRQ
bGFuLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSklUV29ya2xpc3Q7CitjbGFzcyBTYWZlcG9pbnQ7CisKK2NsYXNzIEpJVFdv
cmtsaXN0VGhyZWFkIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CisgICAgY2xhc3Mg
V29ya1Njb3BlOworCisgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKKyAgICBmcmllbmQgY2xh
c3MgV29ya1Njb3BlOworICAgIGZyaWVuZCBjbGFzcyBKSVRXb3JrbGlzdDsKKworcHVibGljOgor
ICAgIEpJVFdvcmtsaXN0VGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgSklUV29ya2xpc3Qm
KTsKKworICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAg
ICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbDsKKyAgICBXb3Jr
UmVzdWx0IHdvcmsoKSBmaW5hbDsKKworICAgIHZvaWQgdGhyZWFkRGlkU3RhcnQoKSBmaW5hbDsK
KworICAgIHZvaWQgdGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpIGZpbmFs
OworCisgICAgVW5jaGVja2VkTG9jayBtX3JpZ2h0VG9SdW47CisgICAgSklUV29ya2xpc3QmIG1f
d29ya2xpc3Q7CisgICAgUmVmUHRyPEpJVFBsYW4+IG1fcGxhbiB7IG51bGxwdHIgfTsKKyAgICBT
YWZlcG9pbnQqIG1fc2FmZXBvaW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZjdmM2RkMTliMzRlZTRiNzYxZWYwM2Y3Y2Iz
N2VhN2Y2ZDMwMTM4Mi4uMjMwYWExM2E1NjQ2MWFhYzg1ODVlNDY1NzU1MDBkOTI4NDkzZDI2OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBA
IC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25BbGxvd2xpc3QuaCIKICNpbmNsdWRl
ICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1
ZGUgIkpJVEJhc2VsaW5lUGxhbi5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNs
dWRlICJKSVRXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgpAQCAtMzc1
LDIzICszNzYsMjEgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmQKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5wb2xsKHZtKTsKLSAgICAKLSAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7Ci0g
ICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDogeworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3
b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxl
dGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUIHx8IHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xp
c3Q6OkNvbXBpbGVkKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2st
PmppdFNvb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuazogewotICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFs
V29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KTsKKworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpOb3RLbm93bikg
eworICAgICAgICBSZWY8SklUQmFzZWxpbmVQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBKSVRC
YXNlbGluZVBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAg
ICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShw
bGFuKSk7CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVDsKICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBl
Y3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBl
bnRyeU9TUihDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5k
IGtpbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRl
eCA3MDc3YWUyOGVlMzY2YjA4ODFjZDk5ZTM5NTdiMzM3OTMxZWIyYmEyLi5kOTQ5N2ViZDRmMGJh
NmY2MjU3OWRjZDU0MjNhN2I5ODQ3ZTk0NGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTI0Nyw2ICsyNDcsNyBAQCBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGNhblVzZUpJVENhZ2UoKTsKICAgICB2KFVuc2lnbmVkLCBtYXhERkdOb2Rlc0luQmFz
aWNCbG9ja0ZvclByZWNpc2VBbmFseXNpcywgMjAwMDAsIE5vcm1hbCwgIkRpc2FibGUgcHJlY2lz
ZSBidXQgY29zdGx5IGFuYWx5c2lzIGFuZCBnaXZlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGlmIHRo
ZSBudW1iZXIgb2YgREZHIG5vZGVzIGluIGEgYmxvY2sgZXhjZWVkcyB0aGlzIHRocmVzaG9sZCIp
IFwKICAgICBcCiAgICAgdihCb29sLCB1c2VDb25jdXJyZW50SklULCB0cnVlLCBOb3JtYWwsICJh
bGxvd3MgdGhlIERGRyAvIEZUTCBjb21waWxhdGlvbiBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhl
IGV4ZWN1dGluZyBKUyB0aHJlYWQiKSBcCisgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZXb3JrbGlz
dFRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMywgMiksIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzLCBjb21w
dXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDMsIDIpIC0gMSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJP
ZldvcmtlclRocmVhZHMoTUFYSU1VTV9OVU1CRVJfT0ZfRlRMX0NPTVBJTEVSX1RIUkVBRFMsIDIp
IC0gMSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZH
Q29tcGlsZXJUaHJlYWRzLCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwg
MCksIE5vcm1hbCwgbnVsbHB0cikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDg2MDgyYjJiZTdjYmE0YjUyNmFhOTdhOWQzOTRiNTlkNjg0MWU4NDkuLjYwZjk4ZjU2M2E3
NmVkZWRhNTJhMDcyODgzZTRiYWZlYmQ3MmRlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5o
IgogI2luY2x1ZGUgIkNvbnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0
ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRPTUF0dHJp
YnV0ZUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkRlYnVnZ2VyU2NvcGUuaCIKQEAgLTYxMywyMCArNjEyLDggQEAgVk06On5WTSgpCiAgICAgCiAj
aWYgRU5BQkxFKEpJVCkKICAgICBpZiAoSklUV29ya2xpc3QqIHdvcmtsaXN0ID0gSklUV29ya2xp
c3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgd29ya2xpc3QtPmNv
bXBsZXRlQWxsRm9yVk0oKnRoaXMpOworICAgICAgICB3b3JrbGlzdC0+Y2FuY2VsQWxsUGxhbnNG
b3JWTSgqdGhpcyk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIC8vIE1ha2Ugc3VyZSBjb25jdXJyZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZSwgYnV0
IGRvbid0IGluc3RhbGwgdGhlbSwgc2luY2UgdGhlcmUgaXMKLSAgICAvLyBubyBwb2ludCB0byBk
b2luZyBzby4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlz
dGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpIHsKLSAgICAgICAgICAgIHdvcmtsaXN0LT5y
ZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKCp0aGlzKTsKLSAgICAgICAgICAgIHdvcmtsaXN0
LT53YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoKnRoaXMpOwotICAgICAgICAgICAgd29y
a2xpc3QtPnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgqdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCiAgICAgd2FpdEZvckFzeW5jaHJvbm91
c0Rpc2Fzc2VtYmx5KCk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429711</attachid>
            <date>2021-05-25 16:57:23 -0700</date>
            <delta_ts>2021-05-25 17:23:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226207-20210525165722.patch</filename>
            <type>text/plain</type>
            <size>251263</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YTA5MTQ4MzJmODk5NGY2M2E5MjAwZjQ0NjYwYThjMmQwZWM0ZWE2Li5kMmIyOTc3ZDBmZjhhODg3
NDI4ZmRkNmIwOGQ4ODkxMGE5NGIzZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMDUtMjQgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgTWVyZ2UgYWxsIHRoZSBKSVQgd29ya2xpc3RzIGludG8gYSBzaGFyZWQg
d29ya2xpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjIwNworCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIERl
bGV0ZSB0aGUgREZHIGFuZCBGVEwgd29ya2xpc3RzIGFuZCByZWZhY3RvciBKSVRXb3JrbGlzdCB0
byBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgIGZvciBhbGwgdGllcnMuIFRoaXMgcmVk
dWNlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbXBpbGVyIHRocmVhZHMgd2hpbGUgYWxsb3dpbmcg
ZWFjaAorICAgICAgICB0aWVyIHRvIHVzZSBtb3JlIHRocmVhZHMgd2hlbmV2ZXIgbmVjZXNzYXJ5
LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGZvciB0aGUKKyAgICAgICAgd29ya2xpc3Qg
dG8gaGF2ZSAzIHRocmVhZHMsIGJhc2VsaW5lIGNhbiB1c2UgdXAgdG8gYWxsIDMgdGhyZWFkcyBh
bmQgREZHIGFuZCBGVEwgZm9sbG93CisgICAgICAgIHRoZSBwcmV2aW91cyBsaW1pdHMgc2V0IHRo
cm91Z2ggSlNDOjpPcHRpb25zLiBSaWdodCBub3csIHRoZSB3b3JrbGlzdCB3aWxsIG9ubHkgZG8g
d29yaworICAgICAgICBvbiB1cHBlciB0aWVycyB3aGVuIGFsbCBsb3dlciB0aWVycyBoYXZlIG5v
IHBlbmRpbmcgdGFza3Mgb3IgaGF2ZSBleGNlZWRlZCB0aGUgbWF4aW11bQorICAgICAgICBudW1i
ZXIgb2YgY29uY3VycmVudCBjb21waWxhdGlvbnMuIGkuZS4gYnkgZGVmYXVsdCB3ZSBvbmx5IERG
RyBjb21waWxlIHdoZW4gdGhlcmUgYXJlCisgICAgICAgIG5vIGJhc2VsaW5lIHRhc2tzIGluIHRo
ZSBxdWV1ZSBhbmQgd2Ugb25seSBGVEwgY29tcGlsZSB3aGVuIHdlIGVpdGhlciBoYXZlIG5vIERG
RyB0YXNrcworICAgICAgICBpbiB0aGUgcXVldWUgT1IgdGhlcmUgYXJlIGFscmVhZHkgMiBERkcg
Y29tcGlsYXRpb25zIGluIHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hp
bmUubW06CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZERkdDb21waWxl
clRocmVhZHM6XSk6CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZGVExD
b21waWxlclRocmVhZHM6XSk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAg
ICAgIChydW5KSVRUaHJlYWRMaW1pdFRlc3RzKToKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpsb2dDb21waWxhdGlvbkNoYW5nZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OnNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoU2FmZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6dGllclVwQ29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplSW5HQyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5UmVhZHkpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFk
SW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbklubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRM
Q29tcGlsZS5oOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAqIGZ0bC9GVExT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBm
dGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbXBsZXRlQWxsSklUUGxh
bnMpOgorICAgICAgICAoSlNDOjpIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0
RW50cmllcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVQZXJpcGhlcnkpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL1Jvb3RN
YXJrUmVhc29uLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUaW1lU3RhdHMpOgorICAg
ICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQmFzZWxpbmVQbGFuLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAuCisgICAgICAg
IChKU0M6OkpJVEJhc2VsaW5lUGxhbjo6SklUQmFzZWxpbmVQbGFuKToKKyAgICAgICAgKEpTQzo6
SklUQmFzZWxpbmVQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklU
QmFzZWxpbmVQbGFuOjpjb2RlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVEJhc2VsaW5l
UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRCYXNlbGluZVBsYW4uaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaC4KKyAgICAgICAg
KiBqaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5jcHAuCisgICAgICAgIChKU0M6OkpJVENvbXBp
bGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklUQ29tcGlsYXRpb25LZXku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25L
ZXkuaC4KKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENvbXBpbGF0aW9uS2V5
KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yISBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojptb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJ
VENvbXBpbGF0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9u
S2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbk1vZGUu
Y3BwLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklUQ29t
cGlsYXRpb25Nb2RlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbXBpbGF0aW9uTW9kZS5oLgorICAgICAgICAoSlNDOjppc0ZUTCk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04pOgorICAgICAgICAqIGppdC9KSVRQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpJ
VFBsYW46OkpJVFBsYW4pOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjYW5jZWwpOgorICAgICAg
ICAoSlNDOjpKSVRQbGFuOjpub3RpZnlDb21waWxpbmcpOgorICAgICAgICAoSlNDOjpKSVRQbGFu
Ojpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRpZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRQbGFuOjprZXkpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppc0tub3du
VG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUUGxhbjo6cmVwb3J0Q29tcGlsZVRpbWVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SklUUGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKiBqaXQvSklUUGxhbi5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUUGxhbjo6fkpJVFBsYW4pOgorICAgICAgICAoSlND
OjpKSVRQbGFuOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmNvZGVCbG9jayBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRocmVhZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkpJVFBsYW46Om1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpzdGFnZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmlzRlRMIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SklUUGxhbjo6ZmluYWxpemVJbkdDKToKKyAgICAgICAgKiBqaXQvSklUUGxhblN0YWdlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3Bw
LgorICAgICAgICAqIGppdC9KSVRTYWZlcG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwLgorICAgICAgICAoSlNDOjpTYWZlcG9p
bnQ6OlNhZmVwb2ludCk6CisgICAgICAgIChKU0M6OlNhZmVwb2ludDo6flNhZmVwb2ludCk6Cisg
ICAgICAgIChKU0M6OlNhZmVwb2ludDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTYWZlcG9pbnQ6
OmNhbmNlbCk6CisgICAgICAgICogaml0L0pJVFNhZmVwb2ludC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaC4KKyAgICAgICAgKiBqaXQvSklU
U2Nhbm5hYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nh
bm5hYmxlLmguCisgICAgICAgICogaml0L0pJVFdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6On5K
SVRXb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdv
cmtsaXN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdv
cmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6cXVldWVMZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRX
b3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxhdGlv
blN0YXRlKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9y
Vk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0pOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y2FuY2VsQWxsUGxhbnNGb3JWTSk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6c2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudERGR0NvbXBpbGF0
aW9ucyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25j
dXJyZW50RlRMQ29tcGlsYXRpb25zKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6cmVtb3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKToKKyAg
ICAgICAgKiBqaXQvSklUV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnN0
YXRpY19jYXN0PHNpemVfdD4pOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdElubGluZXMuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmguCisg
ICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToKKyAgICAg
ICAgKiBqaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklU
V29ya2xpc3RUaHJlYWQ6OkpJVFdvcmtsaXN0VGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUV29y
a2xpc3RUaHJlYWQ6Om5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdFRocmVh
ZDo6cG9sbCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0VGhyZWFkOjp3b3JrKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZERpZFN0YXJ0KToKKyAgICAgICAgKEpT
Qzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZElzU3RvcHBpbmcpOgorICAgICAgICAqIGppdC9K
SVRXb3JrbGlzdFRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHJlYWREYXRhLmguCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06On5WTSk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpv
cHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
CmluZGV4IDBlMjQ4OWMyMzcxM2FmMTNkMzFhMzY0ZDgwYjAwNWQ1YzVlNjZiMWYuLmFkNmU1MDBm
ZjFiZWNkNjEwYzQwMzA4ODBmMWNjYzU1NWZlYjdhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCi0jaW1wb3J0ICJERkdXb3Jr
bGlzdC5oIgorI2ltcG9ydCAiSklUV29ya2xpc3QuaCIKICNpbXBvcnQgIkpTTWFuYWdlZFZhbHVl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2ltcG9y
dCAiSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCIKQEAgLTI3NSwxMSArMjc1LDcgQEAgSlNDb250
ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAq
dmlydHVhbE1hY2hpbmUpCiArIChOU1VJbnRlZ2VyKXNldE51bWJlck9mREZHQ29tcGlsZXJUaHJl
YWRzOihOU1VJbnRlZ2VyKW51bWJlck9mVGhyZWFkcwogewogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIEpTQzo6REZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBKU0M6OkRGRzo6ZXhpc3RpbmdHbG9i
YWxERkdXb3JrbGlzdE9yTnVsbCgpOwotICAgIGlmICh3b3JrbGlzdCkKLSAgICAgICAgcmV0dXJu
IHdvcmtsaXN0LT5zZXROdW1iZXJPZlRocmVhZHMobnVtYmVyT2ZUaHJlYWRzLCBKU0M6Ok9wdGlv
bnM6OnByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBKU0M6OkRGRzo6c2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMobnVtYmVy
T2ZUaHJlYWRzKTsKKyAgICByZXR1cm4gSlNDOjpKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5zZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGlsYXRpb25zKG51bWJl
ck9mVGhyZWFkcyk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpAQCAtMjg4LDExICsyODQsNyBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21W
aXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSkKICsgKE5TVUlu
dGVnZXIpc2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHM6KE5TVUludGVnZXIpbnVtYmVyT2ZU
aHJlYWRzCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNDOjpERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IEpTQzo6REZHOjpleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCk7Ci0g
ICAgaWYgKHdvcmtsaXN0KQotICAgICAgICByZXR1cm4gd29ya2xpc3QtPnNldE51bWJlck9mVGhy
ZWFkcyhudW1iZXJPZlRocmVhZHMsIEpTQzo6T3B0aW9uczo6cHJpb3JpdHlEZWx0YU9mRlRMQ29t
cGlsZXJUaHJlYWRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEpTQzo6REZHOjpzZXRO
dW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyhudW1iZXJPZlRocmVhZHMpOworICAgIHJldHVybiBK
U0M6OkpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnNldE1heGltdW1OdW1iZXJP
ZkNvbmN1cnJlbnRGVExDb21waWxhdGlvbnMobnVtYmVyT2ZUaHJlYWRzKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggZmY0N2Q2MTQyMjhhY2EwOTdhNWI0NWI1Nzlh
ZmVjNTI5M2IyNzJhMS4uMTdjMWU4MGY0OWI4ZTc0NTUxYTI4MTllNmExODg3ODMwOWExNDI1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAKICNp
bXBvcnQgIkN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmgiCi0jaW1wb3J0ICJERkdX
b3JrbGlzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3QuaCIKICNp
bXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTU0OSwxNCArNTQ4LDcgQEAgc3RhdGljIHZv
aWQgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiTnVtYmVy
IG9mIEZUTCB0aHJlYWRzIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZCIsIHVwZGF0ZWROdW1iZXJP
ZlRocmVhZHMgPT0gdGFyZ2V0TnVtYmVyT2ZUaHJlYWRzKTsKICAgICB9OwogCi0gICAgY2hlY2tS
ZXN1bHQoQCJydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkgbXVzdCBydW4gYXQgdGhlIHZlcnkgYmVn
aW5uaW5nIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIGdsb2JhbCBKSVQgd29ya2xpc3Qgd2Fz
IG5vdCBpbml0aWFsaXplZCB5ZXQiLCAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xp
c3RPck51bGwoKSAmJiAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwo
KSk7Ci0KLSAgICB0ZXN0REZHKCk7Ci0gICAgSlNDOjpERkc6OmVuc3VyZUdsb2JhbERGR1dvcmts
aXN0KCk7CiAgICAgdGVzdERGRygpOwotCi0gICAgdGVzdEZUTCgpOwotICAgIEpTQzo6REZHOjpl
bnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwogICAgIHRlc3RGVEwoKTsKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NTE2
Y2QyOGY2OWYxNjVlNDMwZTIxYTFiYjQzMjU2NDQ3N2NlYmVhLi41ZGY2OTNlZmQ3ZDcwMWE0MDRi
MjU3OWI2NWM4OWFmODQ4NDBkMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC02MDQsNyArNjA0LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKIAogICAgIGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5oCiAgICAgZGZnL0RGR0NvbW1v
bi5oCi0gICAgZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oCiAgICAgZGZnL0RGR0RvZXNHQ0NoZWNr
LmgKICAgICBkZmcvREZHTWluaWZpZWRJRC5oCiAKQEAgLTc3MSw2ICs3NzAsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGppdC9KSVRDb2RlTWFw
LmgKICAgICBqaXQvSklUQ29tcGlsYXRpb24uaAogICAgIGppdC9KSVRDb21waWxhdGlvbkVmZm9y
dC5oCisgICAgaml0L0pJVENvbXBpbGF0aW9uTW9kZS5oCiAgICAgaml0L0pJVE1hdGhJQ0Zvcndh
cmRzLmgKICAgICBqaXQvSklUT3BlcmF0aW9ucy5oCiAgICAgaml0L0pJVFN0dWJSb3V0aW5lLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmMwODQwYjYxZTA5MzE2ZjM1ZGQzYzM3
MGFlZDFhZDM4YWNlZGVhNC4uOTQyNzYxMTM0ZGExZjYwOTc1N2JiNWI4NzVhZTI2ZmE5MTFhYjUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NCw4ICsxNjQsNiBAQAogCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0Ey
MUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwotCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwotCQkwRjFGQjM5NzFFMUFG
N0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZH
V29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBN
dXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICov
OyB9OwogCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZFNTFCMTkyMkEzQkMw
MDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLzsgfTsKQEAgLTI3
Niw5ICsyNzQsNiBAQAogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJ
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1
MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYg
LyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovOyB9Owog
CQkwRjJGQ0NGQTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0YzMThBNjAwNzAw
MDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICovOyB9OwotCQkwRjJGQ0NGQzE4QTYwMDcw
MDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJGQ0NGNTE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50
LmggKi87IH07Ci0JCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y2MThB
NjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLzsgfTsKLQkJMEYyRkNDRkYxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWRE
YXRhLmggKi87IH07CiAJCTBGMzAwQjc4MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2lu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3
NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovOyB9OwogCQkwRjMwMEI3QzE4
QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdBMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9OwogCQkwRjMw
Q0I1RTFGQ0U0RTM3MDA0QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUQxRkNFNDZCNDAwNEI1MzIz
IC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzA0LDggKzI5OSw2IEBACiAJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1
MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAv
KiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyog
QWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggKi87IH07CiAJ
CTBGMzhCMDEyMTdDRjA3ODMwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDEwMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGls
YXRpb25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9Owot
CQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1
eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTMx
RDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0
OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZH
T1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzkyQzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwpA
QCAtNDU5LDcgKzQ1Miw2IEBACiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4OThGMzIxQjI3Njg5RjAw
ODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5OEYzMDFCMjc2ODlGMDA4M0Ez
M0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY4RjE0
MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBv
Y2guaCAqLzsgfTsKLQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1v
dmFsUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi87
IH07CiAJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJE
QTUgLyogRlRMTGluay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYy
Qjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLzsgfTsKIAkJ
MEY4Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTU5Miw3ICs1ODQsNiBAQAogCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLzsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlh
dGVkVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRM
VmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2MTc0ODMw
QTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRCMkNFQTE3NDg5NkM3MDA3
QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRK
U0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTExQjFGQUU2
MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAx
IC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTgzLDYgKzEx
NzQsMTUgQEAKIAkJNzBFQzBFQzcxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MEVDMEVDMTFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwNjFB
RkRCRUEyMDA0NDk3MzkgLyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAxMUFGREJFQTIwMDQ0
OTczOSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjEzMUJGODI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGNDI2NTg3
RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi87IH07CisJCTcyMTMxQkY5MjY1ODdFRjIw
MDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQu
aCAqLzsgfTsKKwkJNzIxMzFCRkEyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxMzFCRjYyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovOyB9OworCQk3MjEzMUJGQzI2NTg3RUZB
MDA3MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29y
a2xpc3RJbmxpbmVzLmggKi87IH07CisJCTcyMzk5OEY3MjY1REJDREIwMDU3ODY3RiAvKiBCYXNl
bGluZUpJVFBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMzk5OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLzsgfTsK
KwkJNzI2QjkxQjAyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBODI2NTgxNjUy
MDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLzsgfTsKKwkJNzI2QjkxQjMyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QjkxQUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENv
bXBpbGF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyNkI5MUI3MjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBRjI2NTgxNjUzMDA4
RTZGODIgLyogSklUUGxhbi5oICovOyB9OworCQk3MjZCOTFCQTI2NTgyNjNEMDA4RTZGODIgLyog
SklUQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5o
ICovOyB9OwogCQk3MzExRkEzMjI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczMTFGQTMx
MjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovOyB9OwogCQk3MzRCNjU1
NTIzRjVDMTA0MDBBMDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzRCNjU1NDIzRjRBMzMxMDBBMDY5RDEg
LyogRGVsZXRlUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzNBRDA2MjkyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0ZUJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0FE
MDYyODIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0dXMuaCAqLzsgfTsKQEAgLTIzNjIs
OCArMjM2Miw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjUzNywxMSArMjUzNSw2IEBACiAJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEQ0VQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkZDQ0YyMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdHcmFwaFNhZmVwb2ludC5j
cHA7IHBhdGggPSBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJGQ0NGMzE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR3JhcGhTYWZlcG9pbnQuaDsg
cGF0aCA9IGRmZy9ERkdHcmFwaFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjJGQ0NGNDE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NhZmVwb2ludC5jcHA7IHBhdGggPSBk
ZmcvREZHU2FmZXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkND
RjUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTYWZlcG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdTYWZlcG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8q
IERGR1NjYW5uYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY2Fu
bmFibGUuaDsgcGF0aCA9IGRmZy9ERkdTY2FubmFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYyRkNDRjcxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVGhyZWFkRGF0YS5jcHA7IHBh
dGggPSBkZmcvREZHVGhyZWFkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RocmVhZERhdGEuaDsgcGF0aCA9IGRmZy9ERkdUaHJl
YWREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc3MThBQjA1MTEw
MEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
SW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4MiwxMCArMjU3NSw2IEBACiAJ
CTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVXNlQ291bnRzLmg7IHBhdGggPSBiMy9haXIvQWlyVXNl
Q291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0Yw
MEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRF
bnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVu
dHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7IHBhdGggPSBsbGlu
dC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzOEIw
MTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RG
R0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMzhCMDE1
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZn
L0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4
RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYx
ODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRG
dXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MzUsOCArMjgyNCw2IEBA
CiAJCTBGODk4RjMwMUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyUmFu
Z2VPcHRpbWl6YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXph
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYxNDJGMUFERjA5
MDEwMEVENzkyQyAvKiBERkdFcG9jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdFcG9jaC5jcHA7IHBhdGggPSBkZmcvREZHRXBvY2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRXBvY2guaDsgcGF0aCA9IGRm
Zy9ERkdFcG9jaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjhGMTQzMTFBREYw
OTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgcGF0aCA9
IGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTW92SGludFJlbW92YWxQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBG
VExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA3OCw4ICszMDY1LDYgQEAKIAkJMEZEOEEz
MjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlh
dGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0g
ZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRo
ID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIy
Q0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxs
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQwNjIsNiArNDA0NywyMSBAQAogCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3
MzkgLyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMTFBRkRCRUEyMDA0NDk3MzkgLyogSlNUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxMzFCRjMyNjU4N0VGMjAwNzEx
NENGIC8qIEpJVFNhZmVwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjEz
MUJGNDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFNjYW5uYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjEzMUJGNTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFBsYW5TdGFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29y
a2xpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdvcmts
aXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM5OThGNTI2NURC
Q0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJhc2VsaW5lSklUUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklUUGxhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUE4MjY1ODE2NTIwMDhFNkY4MiAvKiBKSVRX
b3JrbGlzdFRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXb3Jr
bGlzdFRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFBQTI2NTgx
NjUzMDA4RTZGODIgLyogSklUUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2Qjkx
QUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUMyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhy
ZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFdvcmtsaXN0
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUUyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjZCOTFBRjI2NTgxNjUzMDA4RTZGODIgLyogSklUUGxhbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbktleS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIg
LyogSklUQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUQ29tcGlsYXRpb25LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MzExRkEzMTI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVsZXRlQnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzMxMUZBMzMyNDBEQjI0OTAwM0Q0OERCIC8qIERlbGV0ZUJ5SWRWYXJpYW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlbGV0ZUJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzMxOTBEOTYyNDAwOTM0OTAwRjg5MUM5IC8qIERlbGV0ZUJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlbGV0ZUJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYxOTksNiArNjE5OSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkw
RjI0RTUzQjE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkw
RjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJNzIz
OTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8sCisJCQkJNzIz
OTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAogCQkJCTBGNjRC
MjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcw
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNB
OUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtNjI0Niw2ICs2MjQ4LDEw
IEBACiAJCQkJODZENDQ2RTgyNUIyMTI0ODAwRUNBRTc1IC8qIEpJVENvbXBpbGF0aW9uLmNwcCAq
LywKIAkJCQk4NkQ0NDZFNzI1QjIxMjQ4MDBFQ0FFNzUgLyogSklUQ29tcGlsYXRpb24uaCAqLywK
IAkJCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAq
LywKKwkJCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25LZXkuY3Bw
ICovLAorCQkJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5o
ICovLAorCQkJCTcyNkI5MUFFMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1vZGUu
Y3BwICovLAorCQkJCTcyNkI5MUFCMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1v
ZGUuaCAqLywKIAkJCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCAqLywKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmggKi8sCiAJCQkJRkUxODdBMEExQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5j
cHAgKi8sCkBAIC02MjcxLDEwICs2Mjc3LDE2IEBACiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQy
MTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8sCiAJCQkJMEYyNEU1NDUxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggKi8sCisJCQkJNzI2QjkxQUEyNjU4MTY1MzAwOEU2RjgyIC8q
IEpJVFBsYW4uY3BwICovLAorCQkJCTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFu
LmggKi8sCisJCQkJNzIxMzFCRjYyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICov
LAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Ki8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwICovLAogCQkJCUZFM0EwNkI4MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmln
aHRTaGlmdEdlbmVyYXRvci5oICovLAorCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBK
SVRTYWZlcG9pbnQuY3BwICovLAorCQkJCTcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRT
YWZlcG9pbnQuaCAqLywKKwkJCQk3MjEzMUJGNDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5h
YmxlLmggKi8sCiAJCQkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5l
LmNwcCAqLywKIAkJCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
aCAqLywKIAkJCQlGRTQyMzg4RjFCRTE4QzEyMDA1MTQ3MzcgLyogSklUU3ViR2VuZXJhdG9yLmNw
cCAqLywKQEAgLTYyODUsNiArNjI5Nyw5IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJREMwMTg0
MTcxRDEwQzE4NzAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmNwcCAqLywKIAkJCQlEQzAxODQxODFE
MTBDMTg3MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCAqLywKKwkJCQk3MjEzMUJGQjI2NTg3RUZB
MDA3MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggKi8sCisJCQkJNzI2QjkxQUMyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmNwcCAqLywKKwkJCQk3MjZCOTFBODI2NTgx
NjUyMDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3
NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKIAkJCQk3OTJDQjM0NzFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovLAogCQkJCTc5MkNCMzQ4MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovLApAQCAtODEwMiwxMCArODExNyw2
IEBACiAJCQkJMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovLAogCQkJ
CTBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCAqLywKIAkJCQkw
RkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovLAotCQkJCTBGMzhC
MDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCi0JCQkJMEYz
OEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCi0JCQkJMEYz
OEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCi0JCQkJ
MEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovLAogCQkJ
CTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAg
Ki8sCiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9p
c3RpbmdQaGFzZS5jcHAgKi8sCkBAIC04MjA5LDggKzgyMjAsNiBAQAogCQkJCUUzODUwQjE0MjI2
RUQ2M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oICovLAogCQkJCTBGMkJEQzRD
MTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNF
MTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKLQkJCQkwRjhGMTQzMTFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8sCi0JCQkJMEY4
RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAqLywKIAkJ
CQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3Bw
ICovLAogCQkJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9v
cHMuaCAqLywKQEAgLTgyNTgsNyArODI2Nyw2IEBACiAJCQkJMEYyQjlDREYxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhCODAwOURGNzQ0
IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQ
bGFuLmggKi8sCi0JCQkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVz
LmggKi8sCiAJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCkBAIC04Mjc1LDExICs4MjgzLDgg
QEAKIAkJCQk3OUZDOEEwNzFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZS5oICovLAogCQkJCTc5ODBDMTZBMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmNwcCAqLywKIAkJCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldC5oICovLAotCQkJCTBGMkZDQ0Y0MThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuY3BwICovLAotCQkJCTBGMkZDQ0Y1MThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdTYWZlcG9pbnQuaCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEgLyogREZHU2Fm
ZVRvRXhlY3V0ZS5oICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovLAotCQkJCTBGMkZDQ0Y2MThBNjAw
NzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAy
QjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovLAogCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1
NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8sCiAJCQkJMEYxRTNBNTAxNTM3QzJD
QjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8sCkBAIC04MzA4LDggKzgzMTMs
NiBAQAogCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBE
RkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLywKLQkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3
RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8sCi0JCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1
bmtzLmggKi8sCiAJCQkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtODM0OCw5ICs4MzUxLDYgQEAKIAkJCQkwRkZGQzk1
NDE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgg
Ki8sCiAJCQkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8sCi0JCQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmNwcCAqLywKLQkJCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyog
REZHV29ya2xpc3QuaCAqLywKLQkJCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29y
a2xpc3RJbmxpbmVzLmggKi8sCiAJCQkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3Rk
ZmcuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CkBAIC05MzcwLDYgKzkzNzAsNyBAQAog
CQkJCTUzRDQ0NERDMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNCMjFFNjBBRTQ3MDBDMTM4Mzkg
LyogQjNXaWR0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzOTk4RjcyNjVEQkNEQjAwNTc4NjdG
IC8qIEJhc2VsaW5lSklUUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAw
OTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDU4LDcgKzk0NTksNiBAQAogCQkJCUJDMThDNDVFMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFG
MDE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAotCQkJCUZFRjVCNDI5MjYyOEI1MjQwMDE2RTc3NiAvKiBKU1NldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMxNDE3RDQz
MjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTk1NzksOCAr
OTU3OSw2IEBACiAJCQkJMEYwNDM5NkUxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBE
RkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBC
MTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMzhCMDFB
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEIxQ0VCOTg5NTAw
MEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywK
QEAgLTk2MzksNyArOTYzNyw2IEBACiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODUwQjE1MjI2RUQ2NDEwMDlBQkY5
QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYx
NTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEUxNzk5RUEyRTAwODE3NTMz
IC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRUExMzJERUYx
QzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTY1Nyw3ICs5NjU0LDYg
QEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDI3MjYyOEFCRDkw
MDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
QzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NjcsNyArOTY2Myw2IEBACiAJ
CQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBC
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTY3OCwxMCArOTY3Myw4IEBACiAJCQkJODZFQzlE
RDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAx
QTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MzE3QTBC
QkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGRDE4QTYwMDcwMDAxQTI3RjggLyog
REZHU2Nhbm5hYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJB
RDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFF
MjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05Njk3LDcgKzk2OTAsNiBAQAogCQkJCTBGQzIwQ0I2MTg1MkUyQzYw
MEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVj
dHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyRkNDRkYxOEE2MDA3MDAw
MUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5N0EyMTQ2
QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTcxNyw4ICs5NzA5LDYg
QEAKIAkJCQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdG
NDIxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmts
aXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5MDkxMTAwRDMzQjMz
IC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTYxQUE5MDkx
MTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTc1Miw2ICs5NzQyLDcgQEAKIAkJCQkxNDczNDFEMjFEQzAyRTJFMDBBQTI5
QkEgLyogRXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNF
OTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjAyOUQ5MUQ2
RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRUY1QjQzMDI2MkEzMzhCMDAxNkU3NzYgLyogRXhjZXB0aW9uRXhwZWN0YXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25G
dXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwMDBFMTZGNUNEMDBCMzQ0NjAgLyogRXhj
ZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAgLTk3ODgsNyArOTc3OSw2
IEBACiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0QXJndW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDIzMjYyOEEwRUUwMDE2RTc3
NiAvKiBIYXNoTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ2MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCOUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODMyLDcgKzk4
MjIsNiBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyog
RnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTBEMURDQTkyOTQw
MDE0RjlGRSAvKiBGdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVGNUI0
MkMyNjI4Q0JDODAwMTZFNzc2IC8qIFZNVHJhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtOTkxMSw2ICs5OTAwLDcg
QEAKIAkJCQkxNDJFMzEzNjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjMyNjI4QTBFRTAwMTZFNzc2IC8qIEhhc2hNYXBJ
bXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAz
IC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkE3QTk4MTNB
QURGRjgwMDVCN0MyQyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MTc3QTFEQzIyRjk1
OEQ1MDBCMzRDQTIgLyogSGVhcEFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDYyLDYg
KzEwMDUyLDggQEAKIAkJCQlGRTQ3NkZGNDIwN0U4NUQ1MDA5M0NBMkQgLyogSklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZENDQ2RUMyNUIyMTI2MDAwRUNBRTc1IC8qIEpJVENvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyog
SklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkI5MUJBMjY1ODI2
M0QwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2
QjkxQjMyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEQxQzAzMEQ1QzAwMzhCQkNBIC8qIEpJVERpdkdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJ
VEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwNzcsMTIgKzEwMDY5LDE4IEBACiAJ
CQkJODZENDQ2RUEyNUIyMTI1MzAwRUNBRTc1IC8qIEpJVE9wYXF1ZUJ5cHJvZHVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzQ0EzQTRFMjUyN0FCMkYwMDQ4MDJCRiAvKiBKSVRPcGVyYXRpb25M
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QjkxQjcyNjU4MTY1MzAwOEU2Rjgy
IC8qIEpJVFBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMTMxQkZBMjY1ODdFRjIwMDcxMTRD
RiAvKiBKSVRQbGFuU3RhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEw
MDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjEzMUJGOTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjEzMUJGODI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8q
IEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyMTMxQkZDMjY1ODdFRkEwMDcxMTRDRiAvKiBKSVRXb3JrbGlzdElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkI5MUIwMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRXb3Jr
bGlzdFRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDNEY2NkIyMUIxQTQwOTAwMkZEMDA5
IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFB
MUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMy
Q0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAxODQsNiArMTAxODIsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZC
QyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3
OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkVGNUI0MjUyNjI4QTg1MDAwMTZFNzc2IC8qIEpTTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEIyODZEMUVCOEU2RDUwMDBFQjVEMiAvKiBKU01hcmtpbmdDb25zdHJh
aW50UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEz
IC8qIEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjE5LDYgKzEwMjE4LDcgQEAK
IAkJCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mjk5RDlFMTdEMTI4Mzcw
MDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjkyNjI4QjUyNDAw
MTZFNzc2IC8qIEpTU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5MERENzAxODJG
NDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJERkNC
MkJCRTkwRjQxMzQ5RTFCMEJFRCAvKiBKU1NvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDI0NywxMiArMTAyNDcsMTIgQEAKIAkJCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyog
SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFMUY4RjgyMTU0NzE1QTAw
MDFEREJDIC8qIEpTVmFsdWVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRThDMDMxMjI2
NEE2OTExMDAxQTQ0QUQgLyogU2xvd1BhdGhGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWVSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMg
LyogSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4
MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFRjVC
NDI3MjYyOEFCRDkwMDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQz
Q0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTMx
LDYgKzEwNTMxLDcgQEAKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDlGMkYwMTdBMEFD
MDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOEMwMzEy
MjY0QTY5MTEwMDFBNDRBRCAvKiBTbG93UGF0aEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVCNEEzMzFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0YyM0E4MjFFQ0YxM0ZFMDA5NzhEOTkgLyogU25pcHBldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDU2OCw3ICsxMDU2OSw2IEBACiAJCQkJQkNERTNBQjgwRTZD
ODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk4Njk0M0Ix
RjhDMEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICov
LAotCQkJCUZFRjVCNDI1MjYyOEE4NTAwMDE2RTc3NiAvKiBKU01hcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1
cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDY2MSw2ICsxMDY2MSw3
IEBACiAJCQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUM1Nzk3MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1U
cmFwcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MkMyNjI4Q0JDODAwMTZFNzc2IC8qIFZN
VHJhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5
REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Y0MEU5MzFE
NUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzQ0E3MzBBMUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xMDc1Myw3ICsxMDc1NCw2IEBACiAJCQkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8q
IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
RTgwMjlDMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRjUxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDMwMjYyQTMz
OEIwMDE2RTc3NiAvKiBFeGNlcHRpb25FeHBlY3RhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQyRkNDMUExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JGNzFEQjU4REFEMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzFCMURC
NTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNlZWZhMDRkYjUxMzU1MzVl
ZWZhZGZkNzMxNzY1NDgxM2E2ODY2YzguLmJjMWNiM2Q5Y2VkNzM0OTE1NjUxMGY3Y2JjYmNhOTFk
Nzk3NDVkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEsNCArMSw0IEBACi0v
LyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0MSw4ICszNDEsNiBAQCBk
ZmcvREZHQ29kZU9yaWdpblBvb2wuY3BwCiBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKIGRm
Zy9ERkdDb21tb24uY3BwCiBkZmcvREZHQ29tbW9uRGF0YS5jcHAKLWRmZy9ERkdDb21waWxhdGlv
bktleS5jcHAKLWRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwCiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCiBkZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcAogZGZnL0RGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCkBAIC00MTYsNyArNDE0LDYgQEAgZGZnL0RGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCiBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKIGRmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKLWRm
Zy9ERkdTYWZlcG9pbnQuY3BwCiBkZmcvREZHU25pcHBldFBhcmFtcy5jcHAKIC8vIFRoZXNlIGZp
bGVzIHRha2UgYSBsb25nIHRpbWUgdG8gY29tcGlsZSBzbyB3ZSBkbyB0aGVtIGluZGl2aWR1YWxs
eS4KIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgQG5vLXVuaWZ5CkBAIC00MjgsNyArNDI1LDYg
QEAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKIGRmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCi1kZmcvREZHVGhyZWFkRGF0YS5j
cHAKIGRmZy9ERkdUaHVua3MuY3BwCiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5j
cHAKIGRmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKQEAgLTQ0OCw3
ICs0NDQsNiBAQCBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAKIGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcAogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKIGRm
Zy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAotZGZnL0RGR1dvcmtsaXN0LmNwcAog
CiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCiBkaXNhc3NlbWJsZXIvQ2Fwc3Rv
bmVEaXNhc3NlbWJsZXIuY3BwCkBAIC02MjQsNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNw
cAogaml0L0NDYWxsSGVscGVycy5jcHAKIGppdC9DYWNoZWRSZWNvdmVyeS5jcHAKQEAgLTY0OCw2
ICs2NDQsOCBAQCBqaXQvSklUQ2FsbC5jcHAKIGppdC9KSVRDYWxsMzJfNjQuY3BwCiBqaXQvSklU
Q29kZS5jcHAKIGppdC9KSVRDb21waWxhdGlvbi5jcHAKK2ppdC9KSVRDb21waWxhdGlvbktleS5j
cHAKK2ppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwCiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcAog
aml0L0pJVERpdkdlbmVyYXRvci5jcHAKIGppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNjU5LDE0
ICs2NTcsMTcgQEAgaml0L0pJVE9wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBqaXQvSklUT3Bjb2Rlcy5j
cHAKIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCiBqaXQvSklUT3BlcmF0aW9ucy5jcHAKK2ppdC9K
SVRQbGFuLmNwcAogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAKK2ppdC9KSVRTYWZl
cG9pbnQuY3BwCiBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNw
cAogaml0L0pJVFRodW5rcy5jcHAKIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAKIGppdC9KSVRXb3JrbGlzdC5jcHAKK2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAK
IGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAKIGppdC9SZWcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCmluZGV4IDU2Mzg4YTA2ZDdjNjJkNDhkZDc4MDliNjQwNmRhYmEwMDVmOGM5MWMu
LjdkZjA1ZTEwYmM5MGI2NTZmMzUwM2M4NWMwNTRjNWQzYWZhN2M2YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00Myw3ICs0Myw2IEBACiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5j
bHVkZSAiREZHSklUQ29kZS5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
RXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db2RlQmxvY2suaCIKQEAgLTU1LDYgKzU0LDcgQEAKICNpbmNsdWRlICJJc29DZWxs
U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgor
I2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgpAQCAt
MjU5OCw5ICsyNTk4LDggQEAgaW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVl
KGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIGJvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1p
emF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0
T3JOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6
Q29tcGlsYXRpb25LZXkodGhpcywgREZHOjpERkdNb2RlKSkKLSAgICAgICAgICAgID09IERGRzo6
V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgaWYgKEpJVFdvcmtsaXN0KiB3b3JrbGlzdCA9IEpJ
VFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCkpIHsKKyAgICAgICAgaWYg
KHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKEpJVENvbXBpbGF0aW9uS2V5KHRoaXMsIEpJVENv
bXBpbGF0aW9uTW9kZTo6REZHKSkgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7CiAgICAgICAg
ICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAppbmRleCA4MmIxNDZkZmIwMmY2MzQ1Y2ZmYjU2Y2Y2YTAyYzcxYWUyMGQ4NDVmLi5j
Y2U3ODJjMWUzYzc4MDk1YWE0ZjU3NWYwMWQyZjY1NWI0MzFiZjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjk3MCw3ICs2OTcw
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2Rl
KSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jYXRjaCk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCmluZGV4IGIwNDYxN2M1NjBiNjY3MjhhMTViODE0MGJlOWUyMzgwODgwNTE5YTUuLmM2NmZi
MjIzOWY4ZmQyN2ZhOTFjN2E5N2U2YjVjNmJiODE3ZTkxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKKyNpbmNsdWRlICJKSVRDb21waWxhdGlvbk1v
ZGUuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC02NiwxNyArNjYsMTcgQEAgZW51bSBT
d2l0Y2hLaW5kIHsKICAgICBTd2l0Y2hDZWxsCiB9OwogCi1pbmxpbmUgYm9vbCB2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKENvbXBpbGF0aW9uTW9kZSBtb2RlID0gREZHTW9kZSkKK2lubGluZSBi
b29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBK
SVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZUNv
bXBpbGF0aW9uKCkgfHwgT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKSB8fCAoaXNGVEwo
bW9kZSkgJiYgT3B0aW9uczo6dmVyYm9zZUZUTENvbXBpbGF0aW9uKCkpOwogfQogCi1pbmxpbmUg
Ym9vbCBsb2dDb21waWxhdGlvbkNoYW5nZXMoQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBERkdNb2Rl
KQoraW5saW5lIGJvb2wgbG9nQ29tcGlsYXRpb25DaGFuZ2VzKEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlID0gSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiB7CiAgICAgcmV0dXJuIHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQobW9kZSkgfHwgT3B0aW9uczo6bG9nQ29tcGlsYXRpb25DaGFuZ2VzKCk7
CiB9CiAKLWlubGluZSBib29sIHNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKENvbXBpbGF0aW9u
TW9kZSBtb2RlKQoraW5saW5lIGJvb2wgc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UoSklUQ29t
cGlsYXRpb25Nb2RlIG1vZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAgICBpZiAo
aXNGVEwobW9kZSkpCiAgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFz
ZSgpIHx8IE9wdGlvbnM6OmR1bXBERkdGVExHcmFwaEF0RWFjaFBoYXNlKCk7CkBAIC0zNTksNyAr
MzU5LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBsZWFzdFVwcGVyQm91bmQoQ2FwYWJpbGl0
eUxldmVsIGEsIENhcGFiaWxpdHlMZXZlbCBiKQogfQogCiAvLyBVbmNvbmRpdGlvbmFsbHkgZGlz
YWJsZSBERkcgZGlzYXNzZW1ibHkgc3VwcG9ydCBpZiB0aGUgREZHIGlzIG5vdCBjb21waWxlZCBp
bi4KLWlubGluZSBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseShDb21waWxhdGlvbk1vZGUgbW9k
ZSA9IERGR01vZGUpCitpbmxpbmUgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHkoSklUQ29tcGls
YXRpb25Nb2RlIG1vZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkgfHwgKGlzRlRMKG1vZGUpICYmIE9wdGlvbnM6OmR1bXBG
VExEaXNhc3NlbWJseSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tcGlsYXRpb25LZXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21w
aWxhdGlvbktleS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNDE2ZmZiZWEy
OGYxYWQzMmIzNDYxYzU4NGI5NzIwMTdhYjBkYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxh
dGlvbktleS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJERkdDb21waWxhdGlvbktleS5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewotCi12b2lkIENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Ci17Ci0gICAgaWYgKCEqdGhpcykgewotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3By
b2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7Ci19Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tcGlsYXRpb25LZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tcGlsYXRpb25LZXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0NmY1ZWRh
MzlhMDY3NTM3YzZjODBlOTEyYzRjYTZkMjM4MTcyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBp
bGF0aW9uS2V5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIENvZGVCbG9ja1Nl
dDsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIENvbXBpbGF0aW9uS2V5IHsKLXB1YmxpYzoK
LSAgICBDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIp
Ci0gICAgICAgICwgbV9tb2RlKEludmFsaWRDb21waWxhdGlvbk1vZGUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCi0gICAgICAgICwgbV9tb2RlKERG
R01vZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDb21waWxhdGlvbktleShDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQotICAgICAgICAsIG1fbW9kZShtb2RlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEludmFsaWRDb21waWxhdGlvbk1vZGU7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEludmFs
aWRDb21waWxhdGlvbk1vZGU7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQotICAgIENvbXBpbGF0aW9u
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCi0gICAgICAg
ICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBtX21vZGUpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKLSAgICBDb21waWxhdGlvbk1vZGUg
bV9tb2RlOwotfTsKLQotc3RydWN0IENvbXBpbGF0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29tcGlsYXRpb25LZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvbXBpbGF0aW9uS2V5JiBhLCBjb25z
dCBDb21waWxhdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6REZHOjpDb21waWxhdGlvbktleT4gOiBKU0M6OkRGRzo6Q29tcGlsYXRpb25LZXlI
YXNoIHsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpDb21waWxhdGlvbktleT4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkNvbXBpbGF0aW9uS2V5PiB7IH07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxh
dGlvbk1vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQ5NTMzMWNkODEx
NzEyZjA2NzA4NDUzNzdjOWJmNDhhZTg5YWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRp
b25Nb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9kZS5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLW5h
bWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7Ci0KLXZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludmFsaWRDb21waWxhdGlvbk1vZGU6Ci0gICAgICAg
IG91dC5wcmludCgiSW52YWxpZENvbXBpbGF0aW9uTW9kZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBERkdNb2RlOgotICAgICAgICBvdXQucHJpbnQoIkRGR01vZGUiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRlRMTW9kZToKLSAgICAgICAgb3V0LnByaW50KCJGVExNb2RlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZToKLSAgICAgICAg
b3V0LnByaW50KCJGVExGb3JPU1JFbnRyeU1vZGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlv
bk1vZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4YTgzOTE1NWU3YzRiMGI5
ZDk2ODYyYWEyZDQ4NDdkMTU5ZmNhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9k
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWVudW0g
Q29tcGlsYXRpb25Nb2RlIHsKLSAgICBJbnZhbGlkQ29tcGlsYXRpb25Nb2RlLAotICAgIERGR01v
ZGUsCi0gICAgRlRMTW9kZSwKLSAgICBGVExGb3JPU1JFbnRyeU1vZGUKLX07Ci0KLWlubGluZSBi
b29sIGlzRlRMKENvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgRlRMTW9kZToKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZToKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkNvbXBpbGF0aW9uTW9kZSk7
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCmluZGV4IGUzMzBjNjBmMTExNDc4ZDM3NDA1YTI4YjM4Y2Y0NjBiYTZkYTc1NmQuLjZkNWE0
NDA5ODIyN2I1OTU1ZDgyNThkMjRlZWJkYThjMjg1MWQ4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNp
bmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQWxsb3dsaXN0LmgiCiAj
aW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgpAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRnVuY3Rpb25BbGxvd2xpc3Qm
IGVuc3VyZUdsb2JhbERGR0FsbG93bGlzdCgpCiB9CiAKIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKKyAgICBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSwKICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CkBAIC04NSwyMCArODUsMTMgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgICAgICAqbmV3IFBsYW4oY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywg
bW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAKICAgICBw
bGFuLT5zZXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBXb3JrbGlzdCYgd29ya2xpc3QgPSBlbnN1cmVH
bG9iYWxXb3JrbGlzdEZvcihtb2RlKTsKLSAgICAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cyhtb2RlKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBERkcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiB3aXRoIHF1ZXVlIGxlbmd0aCAiLCB3b3JrbGlzdC5xdWV1ZUxl
bmd0aCgpLCAiLlxuIik7Ci0gICAgICAgIHdvcmtsaXN0LmVucXVldWUoV1RGTW92ZShwbGFuKSk7
Ci0gICAgICAgIHJldHVybiBDb21waWxhdGlvbkRlZmVycmVkOwotICAgIH0KLSAgICAKLSAgICBw
bGFuLT5jb21waWxlSW5UaHJlYWQobnVsbHB0cik7Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXpl
V2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CisgICAgSklUV29ya2xpc3QmIHdvcmtsaXN0ID0g
SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dXNlQ29uY3VycmVudEpJVCgpICYmIGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtb2RlKSwg
IkRlZmVycmluZyBERkcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiB3aXRoIHF1ZXVl
IGxlbmd0aCAiLCB3b3JrbGlzdC5xdWV1ZUxlbmd0aCgpLCAiLlxuIik7CisgICAgcmV0dXJuIHdv
cmtsaXN0LmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJ
VCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBWTSYsIENvZGVC
bG9jayosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCwgY29uc3Qg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiwKKyAgICBWTSYsIENvZGVCbG9jayosIENvZGVC
bG9jayosIEpJVENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+JiwKICAgICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiYmKQogewogICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAgLTEwNiwxNSArOTksMTMg
QEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBp
bGF0aW9uTW9kZSBtb2RlLAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVC
bG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLAogICAg
IEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBjb21waWxlSW1wbCgKICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2Rl
QmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywKICAg
ICAgICAgY2FsbGJhY2suY29weVJlZigpKTsKLSAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQpCi0gICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVC
bG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKaW5kZXggYzdiYTdmNmFjNzdl
ZGI2ZDM4ZGExYmNiZmE0ZmZmYzFkNzQ4NTlkYy4uMmExYzljMTAxN2UyYzUzZTI5MmMwYzNmOTk5
YmZmMDQxN2UyZDg4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9u
TW9kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw3
ICs0MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygp
OwogLy8gSWYgdGhlIHdvcmtsaXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29t
cGlsZS4gT3RoZXJ3aXNlIHdlIGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYg
d2UgZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRo
ZSByZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIFZNJiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlLAorICAg
IFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25Nb2RlLAogICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBj
b25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAg
UmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAppbmRleCBkMmJkODk3ZDRmODQ1YzY4Njg1ODZkYWYyYmJjNzQ5MWEzOGEx
OGQ5Li45YjY4NGVlMzBlNGRjNWQyYjk4ZGE5OGM2YzI5ODFlNjdhZTIxYWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSAiREZH
Tm9kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdQcm9wZXJ0eVR5cGVL
ZXkuaCIKLSNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oIgorI2luY2x1ZGUgIkpJVFNjYW5uYWJsZS5oIgogI2luY2x1ZGUgIk1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGhTYWZlcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGhTYWZlcG9pbnQuaAppbmRleCBmNTdmMjQ2MDRjMGQzNTYyYzk0NzhkZDc4Mjk0NGQ3M2M5MmI5
ZWMxLi5mNWE2ZmQ2ZjIwNmIyY2QzZDA0ZWRkYTVjNzdhNTEzODNlNTg2M2FjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCisjaW5j
bHVkZSAiSklUU2FmZXBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggNDg1Yzc3NDdiYTQwMTQxOGM5NjI3YTRk
ODM0NGQ3YjIzN2FjMWJmYy4uNWIyZmMwNWZmMThkMmFjMzNjM2NmOGE2MDVkYTYxM2EyYzhjMzg2
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYXQgbGVhc3Qg
c29tZSB2YWxpZGF0aW9uIHdoZW4gT1NSIGVudGVyaW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NTExCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSAhPSBKSVRDb21waWxhdGlvbk1v
ZGU6OkZUTEZvck9TUkVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZhaWxh
YmlsaXR5TWFwLm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1h
cC5tX2xvY2Fsc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggOGVhZTgxZjQ5NWFkZDg4
ZDNmYTczZWRhODJhZTVkYjQ2ZDczMjRiMy4uM2IxMDgzZjYxODFiNTdkOTdjOWU5ZmZmYmNlN2Nh
ZDdlMTgxNDhmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9k
ZTo6RlRMRm9yT1NSRW50cnkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUyk7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBlMTgxN2ExY2MxZTkzNTRkNGIy
NWY5ZmIwNWJhNTBlNjVlYTM0MzZhLi5lMzM2OThlOGU2NTFhMzY5MzE0OWJjMDgyOWM1NjM5YmJk
YzUzMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
QEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiREZHV29y
a2xpc3QuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKICNpbmNsdWRlICJEZWZpbmVQcm9w
ZXJ0eUF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTQ0LDYg
KzQzLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKICNpbmNsdWRlICJIYXNPd25Qcm9w
ZXJ0eUNhY2hlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKSVRXb3Jr
bGlzdC5oIgogI2luY2x1ZGUgIkpTQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgpAQCAtMzcwMSwxNCArMzcw
MSwxMCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7Ci0gICAgaWYgKFdvcmtsaXN0
KiB3b3JrbGlzdCA9IGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSkgewotICAgICAg
ICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAot
ICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCksIEZUTE1vZGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmts
aXN0OjpOb3RLbm93bjsKKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJ
VFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKAorICAgICAgICB2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEwpKTsKICAgICAKLSAgICBpZiAod29ya2xp
c3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUg
PT0gSklUV29ya2xpc3Q6OkNvbXBpbGluZykgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgic3RpbGwgY29tcGlsaW5nIikpOwogICAg
ICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoCiAgICAgICAgICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwpAQCAt
MzcyMyw3ICszNzE5LDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGls
ZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxl
ZCkgeworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewog
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIs
ICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdl
IGZpbmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0IGNhc2UgdGhl
CiAgICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KQEAgLTM3
MzQsNyArMzczMCw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAvLyBX
ZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0sIGNv
ZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29kZUlu
ZGV4KCksCisgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEwsIEJ5dGVjb2RlSW5kZXgoKSwKICAgICAgICAgT3Bl
cmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVy
IGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpAQCAtMzc5MCwxMiArMzc4Niw4IEBAIHN0
YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQnl0
ZWNvZGVJbmRleCBvcmlnaW5CeXRlCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCiAgICAgLy8gUmVzb2x2ZSBhbnkgcGVuZGluZyBwbGFuIGZvciBP
U1IgRW50ZXIgb24gdGhpcyBmdW5jdGlvbi4KLSAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RT
dGF0ZTsKLSAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3Jr
bGlzdE9yTnVsbCgpKSB7Ci0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxl
dGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgSklU
V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFs
V29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgdm0sIEpJVENv
bXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEpJVENvbXBpbGF0aW9u
TW9kZTo6RlRMRm9yT1NSRW50cnkpKTsKIAogICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAgCkBAIC0zODIzLDcgKzM4MTUsNyBAQCBzdGF0aWMg
Y2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2Rl
SW5kZXggb3JpZ2luQnl0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHdvcmtsaXN0U3Rh
dGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJ
VFdvcmtsaXN0OjpDb21waWxpbmcpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoInN0aWxsIGNvbXBpbGluZyIpKTsKICAgICAgICAg
aml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMzg3NCw3ICszODY2LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9yaWdpbkJ5dGUKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkg
eworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgi
Y29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBp
bGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNvZGUgYmxvY2sgIiwgKmNvZGVC
bG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQuIik7CkBAIC0zOTg1LDcgKzM5NzcsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29t
bW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggb3JpZ2luQnl0
ZQogCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMT1NSIiwg
KCkpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGlsZSgKLSAg
ICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5
TW9kZSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwKKyAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJs
b2NrLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnksIG9yaWdp
bkJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSh0cmlnZ2VyQWRkcmVzcykpOwog
CiAgICAgaWYgKGppdENvZGUtPm5ldmVyRXhlY3V0ZWRFbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCmluZGV4IDk3NGEzMTBjN2VjZjc3NWYwYzkxY2I0N2YwMzFiNTE0MDY4
NDUxM2UuLmM0YzgyOGY0ZmYxZDljYTQ2NTFhMzc2Y2FkZTJkMDJkNWViNTkwNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtODgsMTUgKzg4LDYgQEAKICNpbmNsdWRl
ICJGVExTdGF0ZS5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0MgewotCi1leHRlcm4gU2Vjb25k
cyB0b3RhbERGR0NvbXBpbGVUaW1lOwotZXh0ZXJuIFNlY29uZHMgdG90YWxGVExDb21waWxlVGlt
ZTsKLWV4dGVybiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7Ci1leHRlcm4gU2Vjb25k
cyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7Ci0KLX0KLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBuYW1lc3BhY2UgewpAQCAtMTEzLDE3ICsxMDQsMTggQEAgdm9pZCBkdW1wQW5k
VmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0LCBib29sIGZvcmNlRHVt
cCA9IGZhbHNlKQogICAgICAgICB2YWxpZGF0ZShncmFwaCwgbW9kZUZvckZpbmFsVmFsaWRhdGUp
OwogfQogCi1Qcm9maWxlcjo6Q29tcGlsYXRpb25LaW5kIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
Rm9yTW9kZShDb21waWxhdGlvbk1vZGUgbW9kZSkKK1Byb2ZpbGVyOjpDb21waWxhdGlvbktpbmQg
cHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQog
ewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW52YWxpZENvbXBpbGF0aW9uTW9kZToK
KyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOgorICAgIGNh
c2UgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFByb2ZpbGVyOjpERkc7Ci0gICAgY2FzZSBE
RkdNb2RlOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpERkc6CiAgICAgICAgIHJldHVy
biBQcm9maWxlcjo6REZHOwotICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNlIEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMOgogICAgICAgICByZXR1cm4gUHJvZmlsZXI6OkZUTDsKLSAgICBjYXNlIEZU
TEZvck9TUkVudHJ5TW9kZToKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NS
RW50cnk6CiAgICAgICAgIHJldHVybiBQcm9maWxlcjo6RlRMRm9yT1NSRW50cnk7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzMsMjAgKzEyNSwxNyBAQCBQ
cm9maWxlcjo6Q29tcGlsYXRpb25LaW5kIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5kRm9yTW9kZShD
b21waWxhdGlvbk1vZGUgbW9kZSkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBQbGFuOjpQ
bGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29k
ZUJsb2NrLAotICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlLCBCeXRlY29kZUluZGV4IG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSwgQnl0ZWNvZGVJbmRl
eCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNW
YWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAgIDogbV9tb2RlKG1vZGUpCi0gICAgLCBtX3Zt
KCZwYXNzZWRDb2RlQmxvY2stPnZtKCkpCi0gICAgLCBtX2NvZGVCbG9jayhwYXNzZWRDb2RlQmxv
Y2spCi0gICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2NrKQot
ICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgLCBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgLCBtX2NvbXBpbGF0
aW9uKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikgPyBhZG9wdFJlZihuZXcg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJl
Qnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2Rl
KG1vZGUpKSkgOiBudWxscHRyKQotICAgICwgbV9pbmxpbmVDYWxsRnJhbWVzKGFkb3B0UmVmKG5l
dyBJbmxpbmVDYWxsRnJhbWVTZXQoKSkpCi0gICAgLCBtX2lkZW50aWZpZXJzKG1fY29kZUJsb2Nr
KQotICAgICwgbV93ZWFrUmVmZXJlbmNlcyhtX2NvZGVCbG9jaykKLSAgICAsIG1fdHJhbnNpdGlv
bnMobV9jb2RlQmxvY2spCi0gICAgLCBtX3N0YWdlKFByZXBhcmluZykKKyAgICAgICAgOiBCYXNl
KG1vZGUsIHBhc3NlZENvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0
SGFuZGxlVmFsdWVzKQorICAgICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBtX2NvbXBpbGF0aW9uKFVOTElLRUxZKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlcikgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJs
b2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKG1vZGUpKSkgOiBudWxscHRyKQor
ICAgICAgICAsIG1faW5saW5lQ2FsbEZyYW1lcyhhZG9wdFJlZihuZXcgSW5saW5lQ2FsbEZyYW1l
U2V0KCkpKQorICAgICAgICAsIG1faWRlbnRpZmllcnMobV9jb2RlQmxvY2spCisgICAgICAgICwg
bV93ZWFrUmVmZXJlbmNlcyhtX2NvZGVCbG9jaykKKyAgICAgICAgLCBtX3RyYW5zaXRpb25zKG1f
Y29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRDb2RlKCkpOwogICAgIG1faW5saW5lQ2FsbEZyYW1lcy0+ZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOwpAQCAtMTU2LDg0ICsxNDUsMzggQEAgUGxhbjo6flBsYW4oKQogewogfQogCi1i
b29sIFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMoKSBjb25zdAorc2l6ZV90IFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVwb3J0Q29tcGlsZVRpbWVzKCkKLSAgICAgICAg
fHwgT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKQotICAgICAgICB8fCAobV92bSAm
JiBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpOworICAgIGlmICghbV9maW5hbGl6ZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ZpbmFsaXplci0+Y29kZVNpemUoKTsKIH0K
IAotYm9vbCBQbGFuOjpyZXBvcnRDb21waWxlVGltZXMoKSBjb25zdAordm9pZCBQbGFuOjpmaW5h
bGl6ZUluR0MoKQogewotICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKQot
ICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRERkdDb21waWxlVGltZXMoKQotICAgICAgICB8fCAo
T3B0aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwoKSk7CisgICAgQVNTRVJU
KG1fdm0pOworICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygq
bV92bSk7CiB9CiAKLXZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHRocmVh
ZERhdGEpCit2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKLSAgICBtX3RocmVhZERhdGEgPSB0
aHJlYWREYXRhOwotCi0gICAgTW9ub3RvbmljVGltZSBiZWZvcmUgeyB9OwotICAgIENTdHJpbmcg
Y29kZUJsb2NrTmFtZTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkK
LSAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHJlcG9ydENvbXBpbGVUaW1lcygpKSkKLSAgICAgICAgY29kZUJsb2NrTmFtZSA9IHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spOwotCi0gICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3Bl
OwotCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtX21vZGUpIHx8IE9wdGlvbnM6Omxv
Z1BoYXNlVGltZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAq
bV9jb2RlQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIsIGluc3RydWN0aW9ucyBzaXplID0gIiwg
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSwgIlxuIik7Ci0KLSAgICBDb21waWxhdGlv
blBhdGggcGF0aCA9IGNvbXBpbGVJblRocmVhZEltcGwoKTsKLQotICAgIFJFTEVBU0VfQVNTRVJU
KHBhdGggPT0gQ2FuY2VsUGF0aCB8fCBtX2ZpbmFsaXplcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
KHBhdGggPT0gQ2FuY2VsUGF0aCkgPT0gKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKSk7CisgICAgQmFz
ZTo6bm90aWZ5UmVhZHkoKTsKKyAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29tZVJl
YWR5QXN5bmNocm9ub3VzbHkobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwor
fQogCi0gICAgTW9ub3RvbmljVGltZSBhZnRlciB7IH07Ci0gICAgaWYgKFVOTElLRUxZKGNvbXB1
dGVDb21waWxlVGltZXMoKSkpIHsKLSAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLSAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkp
IHsKLSAgICAgICAgICAgIGlmIChpc0ZUTCgpKSB7Ci0gICAgICAgICAgICAgICAgdG90YWxGVExD
b21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKLSAgICAgICAgICAgICAgICB0b3RhbEZUTERG
R0NvbXBpbGVUaW1lICs9IG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKLSAgICAgICAgICAgICAg
ICB0b3RhbEZUTEIzQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEw7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0b3RhbERGR0NvbXBpbGVUaW1lICs9IGFm
dGVyIC0gYmVmb3JlOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHBhdGhOYW1l
ID0gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHBhdGgpIHsKLSAgICBjYXNlIEZhaWxQYXRoOgotICAg
ICAgICBwYXRoTmFtZSA9ICJOL0EgKGZhaWwpIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBE
RkdQYXRoOgotICAgICAgICBwYXRoTmFtZSA9ICJERkciOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZUTFBhdGg6Ci0gICAgICAgIHBhdGhOYW1lID0gIkZUTCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ2FuY2VsUGF0aDoKLSAgICAgICAgcGF0aE5hbWUgPSAiQ2FuY2VsbGVkIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChtX2NvZGVCbG9jaykgeyAv
LyBtX2NvZGVCbG9jayB3aWxsIGJlIG51bGwgaWYgdGhlIGNvbXBpbGF0aW9uIHdhcyBjYW5jZWxs
ZWQuCi0gICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCi0gICAgICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZnRsQ29tcGlsZSIsICgidG9vayAiLCAoYWZ0ZXIgLSBi
ZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIChERkc6ICIsIChtX3RpbWVCZWZvcmVGVEwgLSBi
ZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiLCBCMzogIiwgKGFmdGVyIC0gbV90aW1lQmVmb3JlRlRM
KS5taWxsaXNlY29uZHMoKSwgIikgd2l0aCAiLCBwYXRoTmFtZSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnQ29tcGlsZSIs
ICgidG9vayAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIHdpdGggIiwg
cGF0aE5hbWUpKTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygp
KSkgewotICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwgY29kZUJsb2NrTmFtZSwgIiB1c2lu
ZyAiLCBtX21vZGUsICIgd2l0aCAiLCBwYXRoTmFtZSwgIiBpbnRvICIsIG1fZmluYWxpemVyID8g
bV9maW5hbGl6ZXItPmNvZGVTaXplKCkgOiAwLCAiIGJ5dGVzIGluICIsIChhZnRlciAtIGJlZm9y
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKLSAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCAobV90aW1lQmVmb3JlRlRMIC0gYmVmb3Jl
KS5taWxsaXNlY29uZHMoKSwgIiwgQjM6ICIsIChhZnRlciAtIG1fdGltZUJlZm9yZUZUTCkubWls
bGlzZWNvbmRzKCksICIpIik7Ci0gICAgICAgIGRhdGFMb2coIi5cbiIpOwotICAgIH0KK3ZvaWQg
UGxhbjo6Y2FuY2VsKCkKK3sKKyAgICBCYXNlOjpjYW5jZWwoKTsKKyAgICBtX3Byb2ZpbGVkREZH
Q29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKKyAg
ICBtX2NvbXBpbGF0aW9uID0gbnVsbHB0cjsKKyAgICBtX2ZpbmFsaXplciA9IG51bGxwdHI7Cisg
ICAgbV9pbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKKyAgICBtX3dhdGNocG9pbnRzID0gRGVz
aXJlZFdhdGNocG9pbnRzKCk7CisgICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVy
cygpOworICAgIG1fd2Vha1JlZmVyZW5jZXMgPSBEZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKKyAg
ICBtX3RyYW5zaXRpb25zID0gRGVzaXJlZFRyYW5zaXRpb25zKCk7CisgICAgbV9jYWxsYmFjayA9
IG51bGxwdHI7CiB9CiAKIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJl
YWRJbXBsKCkKQEAgLTMwMCw3ICsyNDMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyZWFkSW1wbCgpCiAgICAgCiAgICAgUlVOX1BIQVNFKHBlcmZvcm1TdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb24pOwogCi0gICAgaWYgKG1fbW9kZSA9PSBGVExGb3JPU1JF
bnRyeU1vZGUpIHsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9y
T1NSRW50cnkpIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBwZXJmb3JtT1NSRW50cnlwb2ludENy
ZWF0aW9uKGRmZyk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBtX2ZpbmFs
aXplciA9IG1ha2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CkBAIC0zNzYsNyArMzE5
LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQog
ICAgIH0KIAogICAgIHN3aXRjaCAobV9tb2RlKSB7Ci0gICAgY2FzZSBERkdNb2RlOiB7CisgICAg
Y2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRzogewogICAgICAgICBkZmcubV9maXhwb2ludFN0
YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1UaWVy
VXBDaGVja0luamVjdGlvbik7CkBAIC00MDUsOCArMzQ4LDggQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQogICAgICAgICByZXR1cm4gREZHUGF0aDsK
ICAgICB9CiAgICAgCi0gICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlN
b2RlOiB7CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAgICBjYXNlIEpJVENv
bXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6IHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAg
ICAgICAgaWYgKEZUTDo6Y2FuQ29tcGlsZShkZmcpID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgewog
ICAgICAgICAgICAgbV9maW5hbGl6ZXIgPSBtYWtlVW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oKnRo
aXMpOwpAQCAtNTgxLDIzICs1MjQsMTIgQEAgdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29tbW9uRGF0
YSogY29tbW9uRGF0YSkKICAgICB9CiB9CiAKLXZvaWQgUGxhbjo6bm90aWZ5Q29tcGlsaW5nKCkK
LXsKLSAgICBtX3N0YWdlID0gQ29tcGlsaW5nOwotfQotCi12b2lkIFBsYW46Om5vdGlmeVJlYWR5
KCkKLXsKLSAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9u
b3VzbHkobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIG1fc3RhZ2Ug
PSBSZWFkeTsKLX0KLQogYm9vbCBQbGFuOjppc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKQogewog
ICAgIHJldHVybiBtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWRPbk1haW5UaHJlYWQoKm1fdm0s
IG1faWRlbnRpZmllcnMpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdp
dGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCitDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6
ZSgpCiB7CiAgICAgLy8gV2UgcGVyZm9ybSBtdWx0aXBsZSBzdG9yZXMgYmVmb3JlIGVtaXR0aW5n
IGEgd3JpdGUtYmFycmllci4gVG8gZW5zdXJlIHRoYXQgbm8gR0MgaGFwcGVucyBiZXR3ZWVuIHN0
b3JlIGFuZCB3cml0ZS1iYXJyaWVyLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQKICAgICAvLyBHQyBp
cyBkZWZlcnJlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgpAQCAtNjU0LDI0ICs1ODYs
MzAgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2Fs
bGJhY2soKQogCiAgICAgLy8gV2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0
aGUgY29kZSBibG9jayB0byB0aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KICAgICBtX3Zt
LT5oZWFwLndyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisKKyAgICBtX2NhbGxiYWNrLT5jb21w
aWxhdGlvbkRpZENvbXBsZXRlKG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrLCBy
ZXN1bHQpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbGFuOjpmaW5hbGl6ZUFu
ZE5vdGlmeUNhbGxiYWNrKCkKK2Jvb2wgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKENvZGVCbG9jayop
PiYgZnVuYykKIHsKLSAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKG1fY29k
ZUJsb2NrLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdD
YWxsYmFjaygpKTsKLX0KKyAgICBpZiAoIUJhc2U6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgZnVuYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotQ29tcGlsYXRpb25LZXkgUGxh
bjo6a2V5KCkKLXsKLSAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCksIG1fbW9kZSk7CisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFs
dWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0
IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAor
ICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorICAg
IGZ1bmMobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChtX3Byb2ZpbGVkREZH
Q29kZUJsb2NrKQorICAgICAgICBmdW5jKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQbGFuOjpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBQbGFu
OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIUJhc2U6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjbGVhbk11c3RIYW5kbGVW
YWx1ZXNJZk5lY2Vzc2FyeSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7IGktLTspIHsKQEAgLTY4Myw3ICs2MjEsNiBAQCB2b2lkIFBsYW46OmNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgbV9yZWNvcmRl
ZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9wcm9maWxl
ZERGR0NvZGVCbG9jayk7CiAKQEAgLTY5NiwyMyArNjMzLDEyIEBAIHZvaWQgUGxhbjo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIAogICAgIG1fd2Vha1Jl
ZmVyZW5jZXMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICBtX3RyYW5zaXRpb25zLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlIHZvaWQg
UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwotdGVtcGxhdGUgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOwotCi12b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCi17Ci0gICAgQVNTRVJUKG1f
dm0pOwotICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92
bSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci1ib29sIFBsYW46OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1f
c3RhZ2UgPT0gQ2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2aXNp
dG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCFC
YXNlOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcyMSwxNCArNjQ3LDkgQEAgYm9vbCBQbGFu
Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogICAgIHJldHVybiB0
cnVlOwogfQogCi10ZW1wbGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKLQogYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkKIHsKLSAgICBpZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpKSkKKyAgICBpZiAoIUJhc2U6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV92bS0+aGVhcC5pc01hcmtlZChtX2NvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTczNywyNiAr
NjU4LDYgQEAgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBQbGFuOjpjYW5jZWwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3RhZ2UgIT0gQ2FuY2VsbGVkKTsKLSAgICBBU1NFUlQobV92bSk7Ci0gICAgbV92bSA9IG51bGxw
dHI7Ci0KLSAgICBtX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9wcm9maWxlZERGR0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgbV9tdXN0SGFuZGxlVmFsdWVzLmNsZWFyKCk7Ci0gICAgbV9j
b21waWxhdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9maW5hbGl6ZXIgPSBudWxscHRyOwotICAgIG1f
aW5saW5lQ2FsbEZyYW1lcyA9IG51bGxwdHI7Ci0gICAgbV93YXRjaHBvaW50cyA9IERlc2lyZWRX
YXRjaHBvaW50cygpOwotICAgIG1faWRlbnRpZmllcnMgPSBEZXNpcmVkSWRlbnRpZmllcnMoKTsK
LSAgICBtX3dlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgbV90
cmFuc2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOwotICAgIG1fY2FsbGJhY2sgPSBudWxs
cHRyOwotICAgIG1fc3RhZ2UgPSBDYW5jZWxsZWQ7Ci19Ci0KIHZvaWQgUGxhbjo6Y2xlYW5NdXN0
SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKQogewogICAgIExvY2tlciBsb2NrZXIgeyBtX211c3RI
YW5kbGVWYWx1ZUNsZWFuaW5nTG9jayB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApp
bmRleCBkZmM3OTY2ZTA2OWI0NTM0YTUzMjkwNjMyOTMxNGYyNjE5YWIyZDY4Li5hNTY4N2I2NjJh
Mzk4ZDEwMDgxODFjMmQ3YzAwMmFiMDhmNzBmNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaApAQCAtMjYsOCArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb21w
aWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uS2V5LmgiCi0jaW5jbHVk
ZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnRpZXMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJE
RkdEZXNpcmVkVHJhbnNpdGlvbnMuaCIKQEAgLTM1LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKICNpbmNs
dWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJKSVRQbGFuLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgpAQCAtNTIsNDUgKzUxLDM1IEBAIGNsYXNz
IFRocmVhZERhdGE7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotY2xhc3MgUGxhbiA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CitjbGFzcyBQbGFuIGZpbmFsIDogcHVibGlj
IEpJVFBsYW4geworICAgIHVzaW5nIEJhc2UgPSBKSVRQbGFuOworCiBwdWJsaWM6CiAgICAgUGxh
bigKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tUb0NvbXBpbGUsIENvZGVCbG9jayogcHJv
ZmlsZWRERkdDb2RlQmxvY2ssCi0gICAgICAgIENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRl
eCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIEpJVENvbXBpbGF0aW9uTW9kZSwgQnl0
ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRz
PE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKIAot
ICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqKTsKLSAgICAKLSAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpOwotICAgIHZvaWQg
ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwotICAgIAotICAgIHZvaWQgbm90aWZ5Q29tcGls
aW5nKCk7Ci0gICAgdm9pZCBub3RpZnlSZWFkeSgpOwotICAgIAotICAgIENvbXBpbGF0aW9uS2V5
IGtleSgpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0
b3I+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBjb25zdCBGdW5j
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
Ym9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3du
VG9CZUxpdmVBZnRlckdDKCk7Ci0gICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKLSAgICB2b2lkIGNh
bmNlbCgpOworICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZmlu
YWxpemVJbkdDKCkgZmluYWw7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoKSBvdmVy
cmlkZTsKIAotICAgIGJvb2wgY2FuVGllclVwQW5kT1NSRW50ZXIoKSBjb25zdCB7IHJldHVybiAh
bV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2Rlcy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIG5vdGlm
eVJlYWR5KCkgZmluYWw7CisgICAgdm9pZCBjYW5jZWwoKSBmaW5hbDsKIAotICAgIHZvaWQgY2xl
YW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKSBmaW5hbDsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICBib29sIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+Jikg
ZmluYWw7CisgICAgYm9vbCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Cisg
ICAgYm9vbCBjYW5UaWVyVXBBbmRPU1JFbnRlcigpIGNvbnN0IHsgcmV0dXJuICFtX3RpZXJVcEFu
ZE9TUkVudGVyQnl0ZWNvZGVzLmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBjbGVhbk11c3RIYW5k
bGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgYm9vbCBpc0ZUTCgpIGNvbnN0IHsgcmV0dXJu
IERGRzo6aXNGVEwobV9tb2RlKTsgfQotICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CiAgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsgfQogICAgIGNvbnN0
IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbXVzdEhhbmRsZVZhbHVlczsgfQotICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEo
KSBjb25zdCB7IHJldHVybiBtX3RocmVhZERhdGE7IH0KICAgICBQcm9maWxlcjo6Q29tcGlsYXRp
b24qIGNvbXBpbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlvbi5nZXQoKTsgfQog
CiAgICAgRmluYWxpemVyKiBmaW5hbGl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsaXplci5n
ZXQoKTsgfQpAQCAtMTA5LDMyICs5OCwxNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxCeXRlY29k
ZUluZGV4LCBGaXhlZFZlY3RvcjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcEluTG9vcEhpZXJhcmNo
eSgpIHsgcmV0dXJuIG1fdGllclVwSW5Mb29wSGllcmFyY2h5OyB9CiAgICAgVmVjdG9yPEJ5dGVj
b2RlSW5kZXg+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KIAotICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENv
bXBpbGluZywgUmVhZHksIENhbmNlbGxlZCB9OwotICAgIFN0YWdlIHN0YWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFnZTsgfQotCiAgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKiBjYWxs
YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2suZ2V0KCk7IH0KICAgICB2b2lkIHNldENh
bGxiYWNrKFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spIHsgbV9j
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKSBj
b25zdDsKLSAgICAKLSAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRo
LCBGVExQYXRoLCBDYW5jZWxQYXRoIH07Ci0gICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRo
cmVhZEltcGwoKTsKKyAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbCgpIG92
ZXJyaWRlOwogICAgIAogICAgIGJvb2wgaXNTdGlsbFZhbGlkT25NYWluVGhyZWFkKCk7CiAgICAg
Ym9vbCBpc1N0aWxsVmFsaWQoKTsKICAgICB2b2lkIHJlYWxseUFkZChDb21tb25EYXRhKik7CiAK
LSAgICAvLyBXYXJuaW5nOiBwcmV0dHkgbXVjaCBhbGwgb2YgdGhlIHBvaW50ZXIgZmllbGRzIGlu
IHRoaXMgb2JqZWN0IGdldCBudWxsZWQgYnkgY2FuY2VsKCkuIFNvLCBpZgotICAgIC8vIHlvdSdy
ZSB3cml0aW5nIGNvZGUgdGhhdCBpcyBjYWxsYWJsZSBvbiB0aGUgY2FuY2VsIHBhdGgsIGJlIHN1
cmUgdG8gbnVsbCBjaGVjayBldmVyeXRoaW5nIQotCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1fbW9k
ZTsKLQotICAgIFZNKiBtX3ZtOwotCiAgICAgLy8gVGhlc2UgY2FuIGJlIHJhdyBwb2ludGVycyBi
ZWNhdXNlIHdlIHZpc2l0IHRoZW0gZHVyaW5nIGV2ZXJ5IEdDIGluIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuLgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrOwogCiAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+IG1fbXVzdEhhbmRsZVZhbHVlczsKQEAgLTE0NSw4ICsxMTksNiBAQCBwcml2YXRlOgogCiAg
ICAgY29uc3QgQnl0ZWNvZGVJbmRleCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgIFRo
cmVhZERhdGEqIG1fdGhyZWFkRGF0YTsKLQogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRp
b24+IG1fY29tcGlsYXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmluYWxpemVyPiBtX2Zp
bmFsaXplcjsKQEAgLTE2MSwxMSArMTMzLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEJ5dGVj
b2RlSW5kZXgsIEZpeGVkVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJh
cmNoeTsKICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVj
b2RlczsKIAotICAgIFN0YWdlIG1fc3RhZ2U7Ci0KICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotCi0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVCZWZv
cmVGVEw7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyNzg4MmRhYTU5ZjZhYTU4MTcyYTlkMjg3OWJkNzg0M2NmMmY5NzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuSW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlw
ZW5hbWUgVmlzaXRvcj4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0ModmlzaXRvcikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBDb21waWxh
dGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3Jt
aW5nCi0gICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2lt
aXN0aWMgYW5kIGFzc3VtZSB0aGF0Ci0gICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUg
dmlzaXRlZCBkdXJpbmcgR0MuCi0KLSAgICBmdW5jKG1fY29kZUJsb2NrKTsKLSAgICBmdW5jKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAobV9wcm9maWxlZERGR0NvZGVCbG9j
aykKLSAgICAgICAgZnVuYyhtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTk0MDcwNjE2M2Q2YTNjYmI2MmQyZjMxYzRiZWZlMTIzYjdmNjM5Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKLQotI2lmIEVOQUJM
RShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUgIkRGR1NjYW5uYWJs
ZS5oIgotI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi1TYWZlcG9pbnQ6OlJlc3VsdDo6flJlc3VsdCgpCi17Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV93YXNDaGVja2VkKTsKLX0KLQotYm9vbCBTYWZlcG9pbnQ6OlJlc3VsdDo6ZGlk
R2V0Q2FuY2VsbGVkKCkKLXsKLSAgICBtX3dhc0NoZWNrZWQgPSB0cnVlOwotICAgIHJldHVybiBt
X2RpZEdldENhbmNlbGxlZDsKLX0KLQotU2FmZXBvaW50OjpTYWZlcG9pbnQoUGxhbiYgcGxhbiwg
UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX3ZtKHBsYW4udm0oKSkKLSAgICAsIG1fcGxhbihwbGFu
KQotICAgICwgbV9kaWRDYWxsQmVnaW4oZmFsc2UpCi0gICAgLCBtX3Jlc3VsdChyZXN1bHQpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7Ci0gICAgcmVzdWx0Lm1f
d2FzQ2hlY2tlZCA9IGZhbHNlOwotICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IGZhbHNl
OwotfQotCi1TYWZlcG9pbnQ6On5TYWZlcG9pbnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZGlkQ2FsbEJlZ2luKTsKLSAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxhbi50aHJlYWRE
YXRhKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+bV9zYWZlcG9pbnQgPT0gdGhp
cyk7Ci0gICAgICAgIGRhdGEtPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci0gICAgICAgIGRhdGEtPm1f
c2FmZXBvaW50ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgU2FmZXBvaW50OjphZGQoU2Nh
bm5hYmxlKiBzY2FubmFibGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2lu
KTsKLSAgICBtX3NjYW5uYWJsZXMuYXBwZW5kKHNjYW5uYWJsZSk7Ci19Ci0KLXZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKLSAg
ICBtX2RpZENhbGxCZWdpbiA9IHRydWU7Ci0gICAgaWYgKFRocmVhZERhdGEqIGRhdGEgPSBtX3Bs
YW4udGhyZWFkRGF0YSgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5tX3NhZmVw
b2ludCk7Ci0gICAgICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gdGhpczsKLSAgICAgICAgZGF0YS0+
bV9yaWdodFRvUnVuLnVubG9ja0ZhaXJseSgpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KLXZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2lu
KTsKLQotICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJu
OyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEKLSAgICAKLSAgICBp
ZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAg
ICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCi10ZW1w
bGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7Ci0gICAgCi0gICAg
aWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
V2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNz
IHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9u
LgotICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRv
cik7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBTYWZlcG9pbnQ6OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2lu
KTsKLSAgICAKLSAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCi0gICAgICAgIHJl
dHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28g
bGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxp
dmUgYW5kIG1vdmUgb24uCi0gICAgCi0gICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVB
ZnRlckdDKCk7Ci19Ci0KLXZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXN1bHQubV9k
aWRHZXRDYW5jZWxsZWQpOyAvLyBXZSBjYW5ub3QgZ2V0IGNhbmNlbGxlZCB0d2ljZSBiZWNhdXNl
IHN1YnNlcXVlbnQgR0NzIHdpbGwgdGhpbmsgdGhhdCB3ZSdyZSBhbGl2ZSBhbmQgdGhleSB3aWxs
IG5vdCBkbyBhbnl0aGluZyB0byB1cy4KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4u
c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwotICAgIG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2Vs
bGVkID0gdHJ1ZTsKLSAgICBtX3ZtID0gbnVsbHB0cjsKLX0KLQotVk0qIFNhZmVwb2ludDo6dm0o
KSBjb25zdAotewotICAgIHJldHVybiBtX3ZtOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMzk4MTY0
OTg5ZGExYWQwYjU3OTZjNjk5ZTFjOGNjZjNhYzZkMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgVk07Ci0KLW5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBQbGFuOwotY2xhc3Mg
U2Nhbm5hYmxlOwotCi1jbGFzcyBTYWZlcG9pbnQgewotcHVibGljOgotICAgIGNsYXNzIFJlc3Vs
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXN1bHQoKQotICAgICAgICAgICAgOiBtX2RpZEdl
dENhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV93YXNDaGVja2VkKHRydWUpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgflJlc3VsdCgpOwotICAgICAgICAK
LSAgICAgICAgYm9vbCBkaWRHZXRDYW5jZWxsZWQoKTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wg
bV9kaWRHZXRDYW5jZWxsZWQ7Ci0gICAgICAgIGJvb2wgbV93YXNDaGVja2VkOwotICAgIH07Ci0g
ICAgCi0gICAgU2FmZXBvaW50KFBsYW4mLCBSZXN1bHQmKTsKLSAgICB+U2FmZXBvaW50KCk7Ci0g
ICAgCi0gICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7Ci0gICAgCi0gICAgdm9pZCBiZWdpbigpOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9v
bCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9C
ZUxpdmVBZnRlckdDKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICAKLSAgICBWTSogdm0oKSBj
b25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgotCi1wcml2
YXRlOgotICAgIFZNKiBtX3ZtOwotICAgIFBsYW4mIG1fcGxhbjsKLSAgICBWZWN0b3I8U2Nhbm5h
YmxlKj4gbV9zY2FubmFibGVzOwotICAgIGJvb2wgbV9kaWRDYWxsQmVnaW47Ci0gICAgUmVzdWx0
JiBtX3Jlc3VsdDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY2FubmFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTA3MmI1YjU4ZmJmNDAzMjcwNDRjZWE3
NTY1M2JlZDI0OTc2MDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKLWNsYXNzIFNsb3RW
aXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgU2Nhbm5hYmxlIHsKLXB1YmxpYzoK
LSAgICBTY2FubmFibGUoKSB7IH0KLSAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7Ci19OwotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZjAzMmViN2UzYzg5NzIzNTI2NWE5M2JjYjMzYzlkYjg5NjI3MDEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCi0KLSNpZiBF
TkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1UaHJl
YWREYXRhOjpUaHJlYWREYXRhKFdvcmtsaXN0KiB3b3JrbGlzdCkKLSAgICA6IG1fd29ya2xpc3Qo
d29ya2xpc3QpCi0gICAgLCBtX3NhZmVwb2ludChudWxscHRyKQotewotfQotCi1UaHJlYWREYXRh
Ojp+VGhyZWFkRGF0YSgpCi17Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RocmVhZERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhy
ZWFkRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJiN2QyYjdjMzYxZThi
OWQzODBjNzI4Y2ZiOGEwNWIxNzQ2OWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBTYWZl
cG9pbnQ7Ci1jbGFzcyBXb3JrbGlzdDsKLQotY2xhc3MgVGhyZWFkRGF0YSB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkRGF0YShXb3JrbGlzdCopOwot
ICAgIH5UaHJlYWREYXRhKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTYWZl
cG9pbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtsaXN0OwotICAgIAotICAgIFdvcmtsaXN0KiBt
X3dvcmtsaXN0OwotICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwotICAgIFVu
Y2hlY2tlZExvY2sgbV9yaWdodFRvUnVuOwotICAgIFNhZmVwb2ludCogbV9zYWZlcG9pbnQ7Ci19
OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IGIzYTMwMzgxNGJhOTY1NTFjYmFhZmY3ZjVhMjMw
MjI4YzkxMjc0YTkuLjhmZDAyZjNiZDM5NDE5ZTgzM2UyN2FhOWExOTc2NTc4NDQ5ZTdhNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFu
Lm1vZGUoKSA9PSBERkdNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3Bs
YW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKTsKIAogICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDE1N2FkZjg3NmRjODQ2ODNhODZjMDQ2ZWEyYmVlY2JhYjk5YTkzNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCi0KLSNpbmNsdWRlICJERkdT
YWZlcG9pbnQuaCIKLSNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgotI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKLSNpbmNsdWRlIDxtdXRl
eD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLWNsYXNzIFdvcmtsaXN0
OjpUaHJlYWRCb2R5IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7Ci1wdWJsaWM6Ci0g
ICAgVGhyZWFkQm9keShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29y
a2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxVbmNoZWNrZWRMb2NrPiBsb2NrLCBSZWY8QXV0
b21hdGljVGhyZWFkQ29uZGl0aW9uPiYmIGNvbmRpdGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkp
Ci0gICAgICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwgbG9jaywgV1RGTW92ZShjb25kaXRp
b24pLCBUaHJlYWRUeXBlOjpDb21waWxlcikKLSAgICAgICAgLCBtX3dvcmtsaXN0KHdvcmtsaXN0
KQotICAgICAgICAsIG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fcmVsYXRpdmVQcmlvcml0eShy
ZWxhdGl2ZVByaW9yaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dvcmtsaXN0Lm1fdGhyZWFkTmFt
ZS5kYXRhKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBvbGxSZXN1bHQgcG9sbChjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKG1fd29ya2xp
c3QubV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2Fp
dDsKLSAgICAgICAgCi0gICAgICAgIG1fcGxhbiA9IG1fd29ya2xpc3QubV9xdWV1ZS50YWtlRmly
c3QoKTsKLSAgICAgICAgaWYgKCFtX3BsYW4pIHsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrbGlzdC5k
dW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCI6
IFRocmVhZCBzaHV0dGluZyBkb3duXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpTdG9wOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpQcmVwYXJpbmcpOwotICAgICAgICBtX3dvcmtsaXN0
Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7Ci0gICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpX
b3JrOwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBXb3JrU2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNz
IFdvcmtTY29wZTsKLSAgICBjbGFzcyBXb3JrU2NvcGUgZmluYWwgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgV29ya1Njb3BlKFRocmVhZEJvZHkmIHRocmVhZCkKLSAgICAgICAgICAgIDogbV90aHJl
YWQodGhyZWFkKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVh
ZC5tX3BsYW4pOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90aHJlYWQubV93b3JrbGlz
dC5tX251bWJlck9mQWN0aXZlVGhyZWFkcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IH5Xb3JrU2NvcGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
dGhyZWFkLm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgICAgICBtX3RocmVhZC5tX3BsYW4g
PSBudWxscHRyOwotICAgICAgICAgICAgbV90aHJlYWQubV93b3JrbGlzdC5tX251bWJlck9mQWN0
aXZlVGhyZWFkcy0tOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IFRocmVhZEJvZHkmIG1fdGhyZWFkOwotICAgIH07Ci0gICAgCi0gICAgV29ya1Jlc3VsdCB3b3Jr
KCkgZmluYWwKLSAgICB7Ci0gICAgICAgIFdvcmtTY29wZSB3b3JrU2NvcGUoKnRoaXMpOwotCi0g
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2RhdGEubV9yaWdodFRvUnVuIH07Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV93b3JrbGlzdC5tX2xvY2sgfTsKLSAgICAg
ICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQotICAgICAgICAg
ICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAgICAgIG1fcGxhbi0+
bm90aWZ5Q29tcGlsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksIG1fd29ya2xpc3QsICI6IENv
bXBpbGluZyAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5Iik7Ci0gICAgICAgIAot
ICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBz
aW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQg
YnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgm
bV9kYXRhKTsKLSAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpDYW5jZWxsZWQp
IHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSkg
ewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBh
cmUhICgyKVxuIik7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgewotICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICAgICAg
aWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X3BsYW4tPm5vdGlmeVJlYWR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3Jr
bGlzdC5kdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCI6IENvbXBpbGVkICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9wbGFuLT52bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwotICAgICAgICAgICAgbV93b3Jr
bGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7Ci0gICAgICAgICAgICBt
X3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdGhyZWFkRGlkU3RhcnQoKSBmaW5hbAotICAgIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFk
IHN0YXJ0ZWQiKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3JlbGF0aXZlUHJpb3JpdHkpCi0g
ICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJp
b3JpdHkpOwotICAgICAgICAKLSAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gbWFrZVVuaXF1
ZTxDb21waWxhdGlvblNjb3BlPigpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRocmVhZElzU3Rv
cHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gV2Un
cmUgaG9sZGluZyB0aGUgV29ya2xpc3Q6Om1fbG9jaywgc28gd2Ugc2hvdWxkIGJlIGNhcmVmdWwg
bm90IHRvIGRlYWRsb2NrLgotICAgICAgICAKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFkIHdpbGwgc3Rv
cCIpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFtX3BsYW4pOwotICAgICAgICAKLSAgICAg
ICAgbV9jb21waWxhdGlvblNjb3BlID0gbnVsbHB0cjsKLSAgICAgICAgbV9wbGFuID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBXb3JrbGlzdCYgbV93b3JrbGlzdDsKLSAgICBUaHJlYWREYXRhJiBt
X2RhdGE7Ci0gICAgaW50IG1fcmVsYXRpdmVQcmlvcml0eTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q29tcGlsYXRpb25TY29wZT4gbV9jb21waWxhdGlvblNjb3BlOwotICAgIFJlZlB0cjxQbGFuPiBt
X3BsYW47Ci19OwotCi1zdGF0aWMgQ1N0cmluZyBjcmVhdGVXb3JrbGlzdE5hbWUoQ1N0cmluZyYm
IHRpZXJOYW1lKQotewotI2lmIE9TKExJTlVYKQotICAgIHJldHVybiB0b0NTdHJpbmcoV1RGTW92
ZSh0aWVyTmFtZSksICJXb3JrZXIiKTsKLSNlbHNlCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhXVEZN
b3ZlKHRpZXJOYW1lKSwgIiBXb3JrbGlzdCBXb3JrZXIgVGhyZWFkIik7Ci0jZW5kaWYKLX0KLQot
V29ya2xpc3Q6OldvcmtsaXN0KENTdHJpbmcmJiB0aWVyTmFtZSkKLSAgICA6IG1fdGhyZWFkTmFt
ZShjcmVhdGVXb3JrbGlzdE5hbWUoV1RGTW92ZSh0aWVyTmFtZSkpKQotICAgICwgbV9wbGFuRW5x
dWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKLSAgICAsIG1fbG9jayhC
b3g8VW5jaGVja2VkTG9jaz46OmNyZWF0ZSgpKQotewotfQotCi1Xb3JrbGlzdDo6fldvcmtsaXN0
KCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBt
X3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0byBpbmRpY2F0ZSB0aGF0
IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgICAgIG1fcGxhbkVucXVldWVk
LT5ub3RpZnlBbGwobG9ja2VyKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJl
YWRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVhZC0+am9pbigp
OwotICAgIEFTU0VSVCghbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOwotfQotCi12b2lkIFdvcmts
aXN0OjpmaW5pc2hDcmVhdGlvbih1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2
ZVByaW9yaXR5KQotewotICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVGhyZWFkcyk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJP
ZlRocmVhZHM7IGktLTspIHsKLSAgICAgICAgY3JlYXRlTmV3VGhyZWFkKGxvY2tlciwgcmVsYXRp
dmVQcmlvcml0eSk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpjcmVhdGVOZXdUaHJlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCi17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZERhdGE+IGRhdGEgPSBtYWtlVW5pcXVlPFRocmVhZERh
dGE+KHRoaXMpOwotICAgIGRhdGEtPm1fdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZEJvZHko
bG9ja2VyLCAqdGhpcywgKmRhdGEsIG1fbG9jaywgbV9wbGFuRW5xdWV1ZWQuY29weVJlZigpLCBy
ZWxhdGl2ZVByaW9yaXR5KSk7Ci0gICAgbV90aHJlYWRzLmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsK
LX0KLQotUmVmPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3JlYXRlKENTdHJpbmcmJiB0aWVyTmFtZSwg
dW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKLXsKLSAgICBS
ZWY8V29ya2xpc3Q+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgV29ya2xpc3QoV1RGTW92ZSh0aWVy
TmFtZSkpKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKG51bWJlck9mVGhyZWFkcywgcmVs
YXRpdmVQcmlvcml0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBXb3JrbGlzdDo6
aXNBY3RpdmVGb3JWTShWTSYgdm0pIGNvbnN0Ci17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xv
Y2sgfTsKLSAgICBQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOwot
ICAgIGZvciAoUGxhbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnZtKCkgPT0g
JnZtKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4mJiBwbGFuKQotewotICAgIExv
Y2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxh
dGlvblF1ZXVlKCkpIHsKLSAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXplICIsIHBsYW4tPmtl
eSgpLCAiXG4iKTsKLSAgICB9Ci0gICAgQVNTRVJUKG1fcGxhbnMuZmluZChwbGFuLT5rZXkoKSkg
PT0gbV9wbGFucy5lbmQoKSk7Ci0gICAgbV9wbGFucy5hZGQocGxhbi0+a2V5KCksIHBsYW4uY29w
eVJlZigpKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICBtX3BsYW5F
bnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7Ci19Ci0KLVdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlz
dDo6Y29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSBrZXkpCi17Ci0gICAgTG9ja2VyIGxv
Y2tlciB7ICptX2xvY2sgfTsKLSAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IE5vdEtub3duOwotICAgIHJldHVybiBpdGVyLT52YWx1ZS0+c3RhZ2UoKSA9PSBQbGFuOjpSZWFk
eSA/IENvbXBpbGVkIDogQ29tcGlsaW5nOwotfQotCi12b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxB
bGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mIHZtKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKLSAgICAKLSAgICAvLyBXaGlsZSB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIGNvbXBpbGVy
IHRvIGZpbmlzaCwgdGhlIGNvbGxlY3RvciBtaWdodCBoYXZlIGFscmVhZHkgc3VzcGVuZGVkCi0g
ICAgLy8gdGhlIGNvbXBpbGVyIGFuZCB0aGVuIGl0IHdpbGwgYmUgd2FpdGluZyBmb3IgdXMgdG8g
c3RvcC4gVGhhdCdzIGEgZGVhZGxvY2suIFdlIGF2b2lkIHRoYXQKLSAgICAvLyBkZWFkbG9jayBi
eSByZWxpbnF1aXNoaW5nIG91ciBoZWFwIGFjY2Vzcywgc28gdGhhdCB0aGUgY29sbGVjdG9yIHBy
ZXRlbmRzIHRoYXQgd2UgYXJlIHN0b3BwZWQKLSAgICAvLyBldmVuIGlmIHdlIGFyZW4ndC4KLSAg
ICBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlIHJlbGVhc2VIZWFwQWNjZXNzU2NvcGUodm0uaGVhcCk7
Ci0gICAgCi0gICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZN
IHRvIGNvbXBsZXRlLiBUaGUgaWRlYSBoZXJlCi0gICAgLy8gaXMgdGhhdCB3ZSB3YW50IGFsbCBv
ZiB0aGUgY2FsbGVyIFZNJ3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3QgY2FyZQotICAgIC8v
IGFib3V0IGFueSBvdGhlciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0ZW1wdCB0byB3YWl0
IG9uIHRob3NlLgotICAgIC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRo
YXQgYWx0aG91Z2ggb3RoZXIgVk1zIG1heSBzdGlsbAotICAgIC8vIGJlIGFkZGluZyBwbGFucywg
b3VyIFZNIHdpbGwgbm90IGJlLgotICAgIAotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07
Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAg
ICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIjog
V2FpdGluZyBmb3IgYWxsIGluIFZNIHRvIGNvbXBsZXRlLlxuIik7Ci0gICAgfQotICAgIAotICAg
IGZvciAoOzspIHsKLSAgICAgICAgYm9vbCBhbGxBcmVDb21waWxlZCA9IHRydWU7Ci0gICAgICAg
IFBsYW5NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGxh
bk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52bSgpICE9ICZ2bSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UoKSAh
PSBQbGFuOjpSZWFkeSkgewotICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBpbGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhbGxBcmVDb21waWxlZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAKLSAgICAgICAgbV9wbGFuQ29tcGlsZWQud2FpdCgqbV9sb2NrKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxS
ZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFBs
YW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07Ci0gICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2
bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBQ
bGFuOjpSZWFkeSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBteVJlYWR5UGxhbnMu
YXBwZW5kKHBsYW4pOwotICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5s
YXN0KCk7Ci0gICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fcGxh
bnMucmVtb3ZlKHBsYW4tPmtleSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbW92
ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0pCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwg
OD4gbXlSZWFkeVBsYW5zOwotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFk
eVBsYW5zKTsKLX0KLQotV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5
UGxhbnNGb3JWTShWTSYgdm0sIENvbXBpbGF0aW9uS2V5IHJlcXVlc3RlZEtleSkKLXsKLSAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4gbXlS
ZWFkeVBsYW5zOwotICAgIAotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFk
eVBsYW5zKTsKLSAgICAKLSAgICBTdGF0ZSByZXN1bHRpbmdTdGF0ZSA9IE5vdEtub3duOwotCi0g
ICAgd2hpbGUgKCFteVJlYWR5UGxhbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gbXlSZWFkeVBsYW5zLnRha2VMYXN0KCk7Ci0gICAgICAgIENvbXBpbGF0aW9uS2V5
IGN1cnJlbnRLZXkgPSBwbGFuLT5rZXkoKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksICp0aGlzLCAiOiBDb21wbGV0aW5n
ICIsIGN1cnJlbnRLZXkpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkg
PT0gUGxhbjo6UmVhZHkpOwotCi0gICAgICAgIHBsYW4tPmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJh
Y2soKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50S2V5ID09IHJlcXVlc3RlZEtleSkK
LSAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29tcGlsZWQ7Ci0gICAgfQotICAgIAotICAg
IGlmICghIXJlcXVlc3RlZEtleSAmJiByZXN1bHRpbmdTdGF0ZSA9PSBOb3RLbm93bikgewotICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBpZiAobV9wbGFucy5jb250
YWlucyhyZXF1ZXN0ZWRLZXkpKQotICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxp
bmc7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHRpbmdTdGF0ZTsKLX0KLQotdm9pZCBX
b3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7Ci0gICAgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsK
LSAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6
OnN1c3BlbmRBbGxUaHJlYWRzKCkKLXsKLSAgICBtX3N1c3BlbnNpb25Mb2NrLmxvY2soKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX3Ro
cmVhZHNbaV0tPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlc3Vt
ZUFsbFRocmVhZHMoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7
IGktLTspCi0gICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLnVubG9jaygpOwotICAg
IG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci12b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwotICAgIHsKLSAgICAgICAg
TG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICAg
ICAgaWYgKHBsYW4tPnZtKCkgIT0gdm0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwbGFuLT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVj
YXVzZToKLSAgICAvLyAoMSkgbm8gbmV3IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFk
cy4gSGVuY2UsIGl0IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3MuCi0gICAgLy8gKDIp
IFRocmVhZERhdGE6Om1fc2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1f
cmlnaHRUb1J1biB3aGljaCB3ZSBtdXN0IGJlCi0gICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNh
dXNlIG9mIGEgcHJpb3IgY2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgotICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgVGhyZWFkRGF0YSog
ZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKLSAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQg
PSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAgICAgaWYgKHNhZmVwb2ludCAmJiBzYWZlcG9pbnQt
PnZtKCkgPT0gdm0pCi0gICAgICAgICAgICBzYWZlcG9pbnQtPmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKHZpc2l0b3IpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgdm9pZCBXb3JrbGlzdDo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lk
IFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7Ci0KLXZvaWQgV29y
a2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCi17Ci0gICAgewotICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFk
UGxhbktleXM7Ci0gICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMu
YmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKLSAgICAgICAgICAgICAgICBwbGFuLT5maW5h
bGl6ZUluR0MoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2VsbGVk
KTsgLy8gU2hvdWxkIG5vdCBiZSBjYW5jZWxsZWQsIHlldC4KLSAgICAgICAgICAgIEFTU0VSVCgh
ZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSk7Ci0gICAgICAgICAgICBkZWFkUGxh
bktleXMuYWRkKHBsYW4tPmtleSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRlYWRQbGFu
S2V5cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktl
eT46Oml0ZXJhdG9yIGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxh
bktleXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3BsYW5zLnRha2UoKml0ZXIp
LT5jYW5jZWwoKTsKLSAgICAgICAgICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVldWU7Ci0g
ICAgICAgICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICAgICAgICAg
IGlmIChwbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICAg
ICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9x
dWV1ZS5zd2FwKG5ld1F1ZXVlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9yZWFk
eVBsYW5zW2ldLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5
UGxhbnMubGFzdCgpOwotICAgICAgICAgICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm8gbG9ja2lu
ZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2VlIGNvbW1lbnQgaW4gdmlzaXRXZWFrUmVmZXJlbmNl
cygpLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKLSAgICAgICAgU2Fm
ZXBvaW50KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAgICAgaWYgKCFzYWZl
cG9pbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0o
KSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+
aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHNhZmVwb2ludC0+Y2FuY2VsKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1vdmVO
b25Db21waWxpbmdQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
bG9jayB9OwotICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKLSAgICBW
ZWN0b3I8UmVmUHRyPFBsYW4+PiBkZWFkUGxhbnM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cGxhbnMpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOwotICAgICAg
ICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q29tcGlsaW5nKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOwotICAgICAgICBkZWFk
UGxhbnMuYXBwZW5kKHBsYW4pOwotICAgIH0KLSAgICBmb3IgKENvbXBpbGF0aW9uS2V5IGtleSA6
IGRlYWRQbGFuS2V5cykKLSAgICAgICAgbV9wbGFucy5yZW1vdmUoa2V5KTsKLSAgICBEZXF1ZTxS
ZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwotICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAg
ICBpZiAoIWRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpCi0gICAgICAgICAgICBu
ZXdRdWV1ZS5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQotICAgIG1fcXVldWUgPSBXVEZN
b3ZlKG5ld1F1ZXVlKTsKLSAgICBtX3JlYWR5UGxhbnMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAg
ICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVy
biBkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpOwotICAgICAgICB9KTsKLSAgICBm
b3IgKGF1dG8mIHBsYW4gOiBkZWFkUGxhbnMpCi0gICAgICAgIHBsYW4tPmNhbmNlbCgpOwotfQot
Ci1zaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
Km1fbG9jayB9OwotICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKLX0KLQotdm9pZCBXb3JrbGlz
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIExvY2tlciBsb2NrZXIgeyAq
bV9sb2NrIH07Ci0gICAgZHVtcChsb2NrZXIsIG91dCk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OmR1
bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAg
IG91dC5wcmludCgKLSAgICAgICAgIldvcmtsaXN0KCIsIFJhd1BvaW50ZXIodGhpcyksICIpW1F1
ZXVlIExlbmd0aCA9ICIsIG1fcXVldWUuc2l6ZSgpLAotICAgICAgICAiLCBNYXAgU2l6ZSA9ICIs
IG1fcGxhbnMuc2l6ZSgpLCAiLCBOdW0gUmVhZHkgPSAiLCBtX3JlYWR5UGxhbnMuc2l6ZSgpLAot
ICAgICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9mQWN0aXZlVGhyZWFk
cywgIi8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOwotfQotCi11bnNpZ25lZCBXb3JrbGlzdDo6
c2V0TnVtYmVyT2ZUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywgaW50IHJlbGF0aXZl
UHJpb3JpdHkpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fc3VzcGVuc2lvbkxvY2sgfTsKLSAg
ICBhdXRvIGN1cnJlbnROdW1iZXJPZlRocmVhZHMgPSBtX3RocmVhZHMuc2l6ZSgpOwotICAgIGlm
IChudW1iZXJPZlRocmVhZHMgPCBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzOyBpLS0gPiBudW1iZXJPZlRocmVh
ZHM7KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdGhyZWFkc1tpXS0+bV90aHJlYWQtPmhhc1Vu
ZGVybHlpbmdUaHJlYWQobG9ja2VyKSkgewotICAgICAgICAgICAgICAgICAgICBtX3F1ZXVlLmFw
cGVuZChudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVh
ZC0+bm90aWZ5KGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnROdW1iZXJPZlRocmVhZHM7
IGktLSA+IG51bWJlck9mVGhyZWFkczspIHsKLSAgICAgICAgICAgIGJvb2wgaXNTdG9wcGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKLSAgICAgICAgICAgICAgICBpc1N0b3BwZWQgPSBtX3RocmVhZHNbaV0tPm1fdGhy
ZWFkLT50cnlTdG9wKGxvY2tlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWlz
U3RvcHBlZCkKLSAgICAgICAgICAgICAgICBtX3RocmVhZHNbaV0tPm1fdGhyZWFkLT5qb2luKCk7
Ci0gICAgICAgICAgICBtX3RocmVhZHMucmVtb3ZlKGkpOwotICAgICAgICB9Ci0gICAgICAgIG1f
dGhyZWFkcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBBU1NFUlQobV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMgPD0gbnVtYmVyT2ZUaHJlYWRzKTsKLSAgICB9IGVsc2UgaWYgKG51bWJlck9mVGhyZWFk
cyA+IGN1cnJlbnROdW1iZXJPZlRocmVhZHMpIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudE51bWJlck9mVGhyZWFk
czsgaSA8IG51bWJlck9mVGhyZWFkczsgaSsrKQotICAgICAgICAgICAgY3JlYXRlTmV3VGhyZWFk
KGxvY2tlciwgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50TnVt
YmVyT2ZUaHJlYWRzOwotfQotCi1zdGF0aWMgV29ya2xpc3QqIHRoZUdsb2JhbERGR1dvcmtsaXN0
Owotc3RhdGljIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzOwotc3RhdGljIHVu
c2lnbmVkIG51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzOwotCi1zdGF0aWMgdW5zaWduZWQgZ2V0
TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKQotewotICAgIHJldHVybiBudW1iZXJPZkRGR0Nv
bXBpbGVyVGhyZWFkcyA/IG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzIDogT3B0aW9uczo6bnVt
YmVyT2ZERkdDb21waWxlclRocmVhZHMoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGdldE51bWJl
ck9mRlRMQ29tcGlsZXJUaHJlYWRzKCkKLXsKLSAgICByZXR1cm4gbnVtYmVyT2ZGVExDb21waWxl
clRocmVhZHMgPyBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA6IE9wdGlvbnM6Om51bWJlck9m
RlRMQ29tcGlsZXJUaHJlYWRzKCk7Ci19Ci0KLXVuc2lnbmVkIHNldE51bWJlck9mREZHQ29tcGls
ZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAgICBhdXRvIHByZXZpb3Vz
TnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKTsKLSAgICBu
dW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFkczsKLSAgICByZXR1cm4g
cHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLXVuc2lnbmVkIHNldE51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAgICBhdXRvIHByZXZp
b3VzTnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMoKTsKLSAg
ICBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFkczsKLSAgICByZXR1
cm4gcHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxE
RkdXb3JrbGlzdCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9i
YWxXb3JrbGlzdE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxX
b3JrbGlzdE9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3JrbGlzdCA9ICZXb3Jr
bGlzdDo6Y3JlYXRlKCJERkciLCBnZXROdW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpLCBPcHRp
b25zOjpwcmlvcml0eURlbHRhT2ZERkdDb21waWxlclRocmVhZHMoKSkubGVha1JlZigpOwotICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9iYWxERkdXb3JrbGlz
dCA9IHdvcmtsaXN0OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsREZHV29ya2xpc3Q7
Ci19Ci0KLVdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCkKLXsKLSAg
ICByZXR1cm4gdGhlR2xvYmFsREZHV29ya2xpc3Q7Ci19Ci0KLXN0YXRpYyBXb3JrbGlzdCogdGhl
R2xvYmFsRlRMV29ya2xpc3Q7Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgp
Ci17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9u
Y2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2VG
bGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3JrbGlzdCA9ICZXb3JrbGlzdDo6Y3JlYXRl
KCJGVEwiLCBnZXROdW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLCBPcHRpb25zOjpwcmlvcml0
eURlbHRhT2ZGVExDb21waWxlclRocmVhZHMoKSkubGVha1JlZigpOwotICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9iYWxGVExXb3JrbGlzdCA9IHdvcmtsaXN0
OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsRlRMV29ya2xpc3Q7Ci19Ci0KLVdvcmts
aXN0KiBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkKLXsKLSAgICByZXR1cm4gdGhl
R2xvYmFsRlRMV29ya2xpc3Q7Ci19Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdEZv
cihDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IEludmFsaWRDb21waWxhdGlvbk1vZGU6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpOwotICAgIGNh
c2UgREZHTW9kZToKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci0g
ICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgotICAgICAgICBy
ZXR1cm4gZW5zdXJlR2xvYmFsRlRMV29ya2xpc3QoKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsK
LX0KLQotdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMoKSB7IHJldHVybiAyOyB9Ci0KLVdvcmts
aXN0JiBlbnN1cmVXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHN3aXRj
aCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdX
b3JrbGlzdCgpOwotICAgIGNhc2UgMToKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbEZUTFdv
cmtsaXN0KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci0gICAgfQot
fQotCi1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVy
biBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7Ci0gICAgY2FzZSAxOgotICAgICAg
ICByZXR1cm4gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLX0KLQotV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBXb3JrbGlzdCogcmVzdWx0ID0gZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4T3JOdWxsKGluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAg
IHJldHVybiAqcmVzdWx0OwotfQotCi12b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0p
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPmNvbXBsZXRl
QWxsUGxhbnNGb3JWTSh2bSk7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkK
LQotdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQotewotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU3NmUwM2U0N2U2ZWY1MDNjNmQwMTE2ZWNmYmRjMGE4YzZjNzVjODguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkRGR1BsYW4uaCIKLSNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCi0jaW5j
bHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
LSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotI2lm
IEVOQUJMRShERkdfSklUKQotCi1jbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtsaXN0PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcs
IENvbXBpbGVkIH07Ci0KLSAgICB+V29ya2xpc3QoKTsKLSAgICAKLSAgICBzdGF0aWMgUmVmPFdv
cmtsaXN0PiBjcmVhdGUoQ1N0cmluZyYmIHRpZXJOYW1lLCB1bnNpZ25lZCBudW1iZXJPZlRocmVh
ZHMsIGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Ci0gICAgCi0gICAgdm9pZCBlbnF1ZXVlKFJl
ZjxQbGFuPiYmKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86Ci0gICAgLy8g
d29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7Ci0gICAgLy8gd29y
a2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKLSAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5h
bWUgVmlzaXRvcj4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIFZN
JiwgY29uc3QgRnVuYyYpOwotCi0gICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVh
ZHkoVk0mKTsKLSAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBp
bGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7Ci0gICAgdm9pZCByZW1vdmVBbGxSZWFkeVBs
YW5zRm9yVk0oVk0mKTsKLSAgICAKLSAgICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKENvbXBpbGF0
aW9uS2V5KTsKLSAgICAKLSAgICBzaXplX3QgcXVldWVMZW5ndGgoKTsKLSAgICAKLSAgICB2b2lk
IHN1c3BlbmRBbGxUaHJlYWRzKCk7Ci0gICAgdm9pZCByZXN1bWVBbGxUaHJlYWRzKCk7Ci0gICAg
Ci0gICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7Ci0gICAgCi0gICAgLy8gT25seSBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZp
c2l0b3ImKTsKLSAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOwotICAgIAotICAgIHZvaWQg
cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShWTSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwotICAgIHVuc2lnbmVkIHNldE51bWJlck9mVGhyZWFkcyh1bnNp
Z25lZCwgaW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgV29ya2xpc3QoQ1N0cmluZyYmIHRpZXJO
YW1lKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywg
aW50KTsKLSAgICB2b2lkIGNyZWF0ZU5ld1RocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYsIGlu
dCk7Ci0gICAgCi0gICAgY2xhc3MgVGhyZWFkQm9keTsKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFk
Qm9keTsKLSAgICAKLSAgICB2b2lkIHJ1blRocmVhZChUaHJlYWREYXRhKik7Ci0gICAgc3RhdGlj
IHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwotICAgIAotICAgIHZvaWQgcmVt
b3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4mKTsKLQot
ICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJikgY29uc3Q7
Ci0gICAgCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07Ci0gICAg
Q1N0cmluZyBtX3RocmVhZE5hbWU7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRE
YXRhPj4gbV90aHJlYWRzOwotICAgIAotICAgIC8vIFVzZWQgdG8gaW5mb3JtIHRoZSB0aHJlYWQg
YWJvdXQgd2hhdCB3b3JrIHRoZXJlIGlzIGxlZnQgdG8gZG8uCi0gICAgRGVxdWU8UmVmUHRyPFBs
YW4+PiBtX3F1ZXVlOwotICAgIAotICAgIC8vIFVzZWQgdG8gYW5zd2VyIHF1ZXN0aW9ucyBhYm91
dCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvZGUgYmxvY2suIFRoaXMKLSAgICAvLyBpcyBwYXJ0
aWN1bGFybHkgZ3JlYXQgZm9yIHRoZSBjdGlfb3B0aW1pemUgT1NSIHNsb3cgcGF0aCwgd2hpY2gg
d2FudHMKLSAgICAvLyB0byBrbm93OiBkaWQgSSBnZXQgaGVyZSBiZWNhdXNlIGEgYmV0dGVyIHZl
cnNpb24gb2YgbWUganVzdCBnb3QKLSAgICAvLyBjb21waWxlZD8KLSAgICB0eXBlZGVmIEhhc2hN
YXA8Q29tcGlsYXRpb25LZXksIFJlZlB0cjxQbGFuPj4gUGxhbk1hcDsKLSAgICBQbGFuTWFwIG1f
cGxhbnM7Ci0gICAgCi0gICAgLy8gVXNlZCB0byBxdWlja2x5IGZpbmQgd2hpY2ggcGxhbnMgaGF2
ZSBiZWVuIGNvbXBpbGVkIGFuZCBhcmUgcmVhZHkgdG8KLSAgICAvLyBiZSBjb21wbGV0ZWQuCi0g
ICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMTY+IG1fcmVhZHlQbGFuczsKLSAgICBSZWY8QXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKLSAgICBVbmNoZWNrZWRDb25kaXRp
b24gbV9wbGFuQ29tcGlsZWQ7Ci0KLSAgICBVbmNoZWNrZWRMb2NrIG1fc3VzcGVuc2lvbkxvY2s7
Ci0gICAgQm94PFVuY2hlY2tlZExvY2s+IG1fbG9jazsKLX07Ci0KLUpTX0VYUE9SVF9QUklWQVRF
IHVuc2lnbmVkIHNldE51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzKHVuc2lnbmVkKTsKLUpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKHVuc2ln
bmVkKTsKLQotLy8gRm9yIERGR01vZGUgY29tcGlsYXRpb25zLgotSlNfRVhQT1JUX1BSSVZBVEUg
V29ya2xpc3QmIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci1KU19FWFBPUlRfUFJJVkFURSBX
b3JrbGlzdCogZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgpOwotCi0vLyBGb3IgRlRM
TW9kZSBhbmQgRlRMRm9yT1NSRW50cnlNb2RlIGNvbXBpbGF0aW9ucy4KLUpTX0VYUE9SVF9QUklW
QVRFIFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwotSlNfRVhQT1JUX1BSSVZB
VEUgV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKTsKLQotV29ya2xp
c3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKENvbXBpbGF0aW9uTW9kZSk7Ci0KLS8vIFNpbXBs
aWZ5IGRvaW5nIHRoaW5ncyBmb3IgYWxsIHdvcmtsaXN0cy4KLXVuc2lnbmVkIG51bWJlck9mV29y
a2xpc3RzKCk7Ci1Xb3JrbGlzdCYgZW5zdXJlV29ya2xpc3RGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCk7Ci1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKHVuc2lnbmVkIGlu
ZGV4KTsKLVdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgp
OwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgY29tcGxldGVBbGxQbGFuc0Zv
clZNKFZNJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci12
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpOwot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YzI2NmY2ZjM2NTYxYWM2ZWM2NDI1MjUxYWRhOGQ2ZjQyZjIwMGM4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3RJbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJERkdQbGFuSW5saW5lcy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVu
YyYgZnVuYykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCB2bSwgZnVuYyk7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBXb3JrbGlzdDo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1
bmMmIGZ1bmMpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKFBs
YW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsK
LSAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgZnVuYyk7Ci0gICAg
fQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVu
YywgdHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9y
JiwgVk0mLCBjb25zdCBGdW5jJikKLXsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmgKaW5kZXggZWJjNjMzM2IyMjAxMzY4YWY0Y2E3NWFiZDczZWY1MDZjNjRjNDU4MS4u
YWE5YzZlMzY5YzE1OTdkOWZjODkxMjZkZTljZTc0ZGZlZDEzYWQxZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTQgQEAKIAogI2lmIEVOQUJM
RShGVExfSklUKQogCi0jaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCiAjaW5jbHVkZSAiRlRMU3Rh
dGUuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiBleHRlcm4gY29uc3QgY2hhciogY29uc3QgdGllck5hbWU7CiAKLXZvaWQg
Y29tcGlsZShTdGF0ZSYsIERGRzo6U2FmZXBvaW50OjpSZXN1bHQmKTsKK3ZvaWQgY29tcGlsZShT
dGF0ZSYsIFNhZmVwb2ludDo6UmVzdWx0Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggMTc1OTkyZTdiZDU2NzA1
M2Y2ZTFkNDQzMDJjNzI2NTE0ZDFlNWU2NS4uMWViMWQ4YWE5ZDY3ZmFkODViYjg1MjU4ZDNlZWVi
ZjljOTAwZDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xMjks
NyArMTI5LDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICB9CiAKICAgICBzd2l0Y2gg
KGdyYXBoLm1fcGxhbi5tb2RlKCkpIHsKLSAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICBjYXNlIEpJ
VENvbXBpbGF0aW9uTW9kZTo6RlRMOiB7CiAgICAgICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVw
ID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1haW5QYXRoSnVtcHM7CkBAIC0xOTEs
NyArMTkxLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogeworICAgIGNhc2UgSklU
Q29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeTogewogICAgICAgICAvLyBXZSBqdW1wIHRv
IGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0ZXIgaGF2aW5nIGJveGVkIHVwIGFsbCBv
ZiB0aGUKICAgICAgICAgLy8gdmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBFdmVyeXRo
aW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhpcwogICAgICAgICAvLyBwb2ludCB3ZSd2
ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNpY2FsbHkgd2UganVzdCBoYXZlIHRvIG1h
a2UgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
aW5kZXggYzA0NzUyZDdiZDlmMWIyZjhhMmVlNTMzMTU3ODEyZTlmZjU1NTFhOS4uODE2N2ZhM2Qw
NTJjMTBiZGYxYjZmNjQ5MGNlMzU5MDdkYWQ4YmYzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9y
T1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAgICBh
dXRvKiBqaXRDb2RlID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpOwogICAg
ICAgICAgICAgICAgIEZpeGVkVmVjdG9yPERGRzo6Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rmx1c2hG
b3JtYXRzKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kp
CkBAIC0xOTQ2Nyw3ICsxOTQ2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGF0IGxl
YXN0IHNvbWUgdmFsaWRhdGlvbiB3aGVuIE9TUiBlbnRlcmluZy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTUxMQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZh
bGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
cGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50
cnkpIHsKIAogICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9n
cmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQogICAgICAgICAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNv
ZGUgbG9jYWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJp
bGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKaW5kZXggMTBiODg2MmM1OTU4
ZWRiYzU5ZDJhMWU4MzEzZDM3Nzc0YTNiODRmZS4uMDFiZGVlYzlmZDM3OTZmNGU0N2RiYWU3MTIw
ZDllNmRhZGU2ZGIwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MiwxMSArNDIsMTEgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IGdyYXBo
KGdyYXBoKQogewogICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUoKSkgewotICAgIGNhc2Ug
RlRMTW9kZTogeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6IHsKICAgICAgICAg
aml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9u
TW9kZTo6RlRMRm9yT1NSRW50cnk6IHsKICAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29k
ZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CiAgICAgICAgIGNv
ZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVkQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRleChn
cmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCmluZGV4IGQyOTUzZTEwY2M5YTFkYWI2YjY3ODBmYjBmMmQ2NDM1NWRiN2M4
M2YuLmEzZWZlYmYxZGE3Nzg4ZmYzMDNlNGY2ODRmNzg3OTVhMWRhY2NjNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTIgQEAgY2xhc3MgUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTsKIAogaW5saW5lIGJvb2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpCiB7Ci0gICAgcmV0dXJuIERGRzo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChERkc6
OkZUTE1vZGUpOworICAgIHJldHVybiBERkc6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoSklU
Q29tcGlsYXRpb25Nb2RlOjpGVEwpOwogfQogCiBpbmxpbmUgYm9vbCBzaG91bGREdW1wRGlzYXNz
ZW1ibHkoKQogewotICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseShERkc6OkZU
TE1vZGUpOworICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseShKSVRDb21waWxh
dGlvbk1vZGU6OkZUTCk7CiB9CiAKIGNsYXNzIFN0YXRlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKaW5kZXggODYxYTQwMmU1MGQwYmNjMGZlYWU2MDMwNDdjZjM1YzJlY2RjNGRlNy4u
NGU4NWU1MmQwZGZhN2UxZTM3ZjdlMWQwMzQ3NTdmNDBjYTk4NDcyNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ29u
c2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIKICNpbmNs
dWRlICJFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDYsNyArNDUsNyBAQAogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgotI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCisj
aW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIkpTV2Vha01hcC5oIgpAQCAtNjM5LDE3ICs2MzgsMTUgQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1
cm47CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5jb21wbGV0ZUFsbEZvclZNKG1fdm0pOworICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
RnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5p
dGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwotICAgIGlmIChPcHRpb25zOjp1c2VKSVQo
KSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1
bmMpOworICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLml0ZXJhdGVDb2Rl
QmxvY2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVuYyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+CkBAIC03MjYsMTIgKzcyMyw5IEBAIHZvaWQgSGVhcDo6
YmVnaW5NYXJraW5nKCkKIAogdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVu
dHJpZXMoKQogewotI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmICghT3B0aW9uczo6dXNlSklU
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9m
V29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
KGkpLnJlbW92ZURlYWRQbGFucyhtX3ZtKTsKLSNlbmRpZgorICAgIEpJVFdvcmtsaXN0OjplbnN1
cmVHbG9iYWxXb3JrbGlzdCgpLnJlbW92ZURlYWRQbGFucyhtX3ZtKTsKIH0KIAogc3RydWN0IEdh
dGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKQEAgLTE2NTMs
MTQgKzE2NDcsNiBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IgY29u
bikKICAgICAgICAgICAgIHZpc2l0b3IudXBkYXRlTXV0YXRvcklzU3RvcHBlZChOb0xvY2tpbmdO
ZWNlc3NhcnkpOwogICAgICAgICB9KTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUpJVCgpKSB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsK
LSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRl
QWxsRm9yVk0obV92bSkKLSAgICAgICAgICAgICYmIGNvbm4gPT0gR0NDb25kdWN0b3I6OkNvbGxl
Y3RvcikKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvbm4pOwogICAgIAogICAgIGlmIChhdXRvKiBzaGFk
b3dDaGlja2VuID0gdm0oKS5zaGFkb3dDaGlja2VuKCkpCkBAIC0xODA2LDcgKzE3OTIsNiBAQCB2
b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3coKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fd29y
bGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEobV93
b3JsZFN0YXRlLmxvYWQoKSAmIHN0b3BwZWRCaXQpKTsKICAgICAKLSAgICBoYW5kbGVHQ0RpZEpJ
VCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOwogICAgIG1fbXV0YXRvckRpZFJ1biA9IHRy
dWU7CiB9CkBAIC0xOTIzLDcgKzE5MDgsNiBAQCB2b2lkIEhlYXA6OmFjcXVpcmVBY2Nlc3NTbG93
KCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShvbGRTdGF0ZSAmIHN0b3BwZWRCaXQpKTsKICAg
ICAgICAgdW5zaWduZWQgbmV3U3RhdGUgPSBvbGRTdGF0ZSB8IGhhc0FjY2Vzc0JpdDsKICAgICAg
ICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0
ZSkpIHsKLSAgICAgICAgICAgIGhhbmRsZUdDRGlkSklUKCk7CiAgICAgICAgICAgICBoYW5kbGVO
ZWVkRmluYWxpemUoKTsKICAgICAgICAgICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiAgICAg
ICAgICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKQEAgLTIwMDMsMTggKzE5ODcsNiBAQCB2b2lkIEhl
YXA6OnJlbGlucXVpc2hDb25uKCkKICAgICB3aGlsZSAocmVsaW5xdWlzaENvbm4obV93b3JsZFN0
YXRlLmxvYWQoKSkpIHsgfQogfQogCi1ib29sIEhlYXA6OmhhbmRsZUdDRGlkSklUKHVuc2lnbmVk
IG9sZFN0YXRlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgaGFzQWNjZXNzQml0
KTsKLSAgICBpZiAoIShvbGRTdGF0ZSAmIGdjRGlkSklUQml0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwg
b2xkU3RhdGUgJiB+Z2NEaWRKSVRCaXQpKSB7Ci0gICAgICAgIFdURjo6Y3Jvc3NNb2RpZnlpbmdD
b2RlRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUodW5zaWdu
ZWQgb2xkU3RhdGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RhdGUgJiBoYXNBY2Nlc3NC
aXQpOwpAQCAtMjAzMiwyNiArMjAwNCwxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpoYW5k
bGVOZWVkRmluYWxpemUodW5zaWduZWQgb2xkU3RhdGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSGVhcDo6aGFuZGxlR0NEaWRKSVQoKQotewotICAgIHdoaWxlIChoYW5kbGVHQ0RpZEpJ
VChtX3dvcmxkU3RhdGUubG9hZCgpKSkgeyB9Ci19Ci0KIHZvaWQgSGVhcDo6aGFuZGxlTmVlZEZp
bmFsaXplKCkKIHsKICAgICB3aGlsZSAoaGFuZGxlTmVlZEZpbmFsaXplKG1fd29ybGRTdGF0ZS5s
b2FkKCkpKSB7IH0KIH0KIAotdm9pZCBIZWFwOjpzZXRHQ0RpZEpJVCgpCi17Ci0gICAgbV93b3Js
ZFN0YXRlLnRyYW5zYWN0aW9uKAotICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgLT4gYm9v
bCB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRCaXQpOwotICAg
ICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfSk7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0TmVlZEZpbmFsaXplKCkKIHsKICAgICBt
X3dvcmxkU3RhdGUuZXhjaGFuZ2VPcihuZWVkRmluYWxpemVCaXQpOwpAQCAtMjE3Myw4ICsyMTMw
LDcgQEAgdm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKICAgICAvLyB0aGUgd29y
a2xpc3RzIHVzZSBBdXRvbWF0aWNUaHJlYWRzIGFueXdheS4KICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1i
ZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmVuc3VyZVdvcmtsaXN0Rm9ySW5k
ZXgoaSkuc3VzcGVuZEFsbFRocmVhZHMoKTsKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFs
V29ya2xpc3QoKS5zdXNwZW5kQWxsVGhyZWFkcygpOwogI2VuZGlmCiB9CiAKQEAgLTIzODksOCAr
MjM0NSw3IEBAIHZvaWQgSGVhcDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKCkKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAg
ICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS5yZXN1bWVBbGxUaHJlYWRzKCk7
CisgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucmVzdW1lQWxsVGhyZWFk
cygpOwogI2VuZGlmCiB9CiAKQEAgLTI5MDIsMjYgKzI4NTcsMjUgQEAgdm9pZCBIZWFwOjphZGRD
b3JlQ29uc3RyYWludHMoKQogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlN
YXJraW5nLAogICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoSklUKQogICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkgewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgICAgICJE
dyIsICJERkcgV29ya2xpc3RzIiwKKyAgICAgICAgICAgICJKdyIsICJKSVQgV29ya2xpc3QiLAog
ICAgICAgICAgICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNd
IChhdXRvJiB2aXNpdG9yKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29w
ZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CisgICAg
ICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9v
dE1hcmtSZWFzb246OkpJVFdvcmtMaXN0KTsKIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAg
ICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyh2
aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS52aXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3Nh
cnkuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOQotICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JH
Qyh2aXNpdG9yLAorICAgICAgICAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3Jr
bGlzdCgpLml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAg
ICAgbV92bSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2Rl
QmxvY2spOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCB2aXNpdG9yKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSklUIFdvcmtsaXN0czpcbiIsIHZpc2l0b3Ip
OwogICAgICAgICAgICAgfSkpLAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6Okdy
ZXllZEJ5TWFya2luZyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFi
Mjg0OGY4Y2M2Mzk0Mjg4ODE2Yjg3MTg4YjljODZjMzE4OGE0YTAuLmYwOTkyZTI2ZmQxOGFmNzc4
ZWFjYTQyZWU1ZWQxZGZkN2I1MDcwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAg
LTk3LDcgKzk3LDYgQEAgY2xhc3MgSlNDR0xpYldyYXBwZXJPYmplY3Q7CiAKIG5hbWVzcGFjZSBE
RkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7Ci1jbGFzcyBXb3JrbGlzdDsKIH0KIAogI2lmIEVO
QUJMRShERkdfSklUKSAmJiBBU1NFUlRfRU5BQkxFRApAQCAtNDk1LDE2ICs0OTQsMTIgQEAgcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFjcXVpcmVBY2Nlc3NTbG93KCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWxlYXNlQWNjZXNzU2xvdygpOwogICAgIAotICAg
IGJvb2wgaGFuZGxlR0NEaWRKSVQodW5zaWduZWQpOwotICAgIHZvaWQgaGFuZGxlR0NEaWRKSVQo
KTsKLSAgICAKICAgICBib29sIGhhbmRsZU5lZWRGaW5hbGl6ZSh1bnNpZ25lZCk7CiAgICAgdm9p
ZCBoYW5kbGVOZWVkRmluYWxpemUoKTsKICAgICAKICAgICBib29sIHJlbGlucXVpc2hDb25uKHVu
c2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaFJlbGlucXVpc2hpbmdDb25uKCk7CiAgICAgCi0gICAg
dm9pZCBzZXRHQ0RpZEpJVCgpOwogICAgIHZvaWQgc2V0TmVlZEZpbmFsaXplKCk7CiAgICAgdm9p
ZCB3YWl0V2hpbGVOZWVkRmluYWxpemUoKTsKICAgICAKQEAgLTU3OSw4ICs1NzQsOCBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNo
b2xkQ2FsbFR5cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxs
VHlwZTo6Q2FjaGVkKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSBWaXNpdG9yPgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9j
a3MoVmlzaXRvciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRv
ciYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+Jik7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KICAgICB2b2lkIGl0ZXJhdGVFeGVj
dXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhWaXNpdG9yJiwg
Y29uc3QgRnVuYyYpOwpAQCAtNzE2LDkgKzcxMSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtdXRhdG9ySGFzQ29ubkJpdCA9IDF1IDw8IDB1OyAvLyBNdXN0IGFs
c28gYmUgcHJvdGVjdGVkIGJ5IHRocmVhZExvY2suCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7IC8vIE9ubHkgc2V0IHdoZW4gIWhhc0FjY2Vzc0Jp
dAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaGFzQWNjZXNzQml0ID0gMXUgPDwgMnU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBnY0RpZEpJVEJpdCA9IDF1IDw8IDN1OyAv
LyBTZXQgd2hlbiB0aGUgR0MgZGlkIHNvbWUgSklUaW5nLCBzbyBvbiByZXN1bWUgd2UgbmVlZCB0
byBjcHVpZC4KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG5lZWRGaW5hbGl6ZUJpdCA9
IDF1IDw8IDR1OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdC
aXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29u
ZGl0aW9uIHZhcmlhYmxlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbmVlZEZpbmFs
aXplQml0ID0gMXUgPDwgM3U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtdXRhdG9y
V2FpdGluZ0JpdCA9IDF1IDw8IDR1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMg
YXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3Rh
dGU7CiAgICAgYm9vbCBtX3dvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fdmlz
aXRSYWNlTG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jvb3RN
YXJrUmVhc29uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Sb290TWFya1JlYXNvbi5o
CmluZGV4IDIzZmI1OTg0ODk4N2ZjNWNmNWJiZjc1MzQxNWI1OWMzNGFhNDdhNGQuLmYyMDk2MzM2
YTJkMmEzNjE1MzMwMTJiNDFlMjgyZjUwNTAzZTU1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Jvb3RNYXJrUmVhc29uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUm9vdE1hcmtSZWFzb24uaApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2KFdlYWtNYXBTcGFjZSkgXAogICAgIHYoV2Vha1NldHMpIFwKICAgICB2KE91dHB1
dCkgXAotICAgIHYoREZHV29ya0xpc3RzKSBcCisgICAgdihKSVRXb3JrTGlzdCkgXAogICAgIHYo
Q29kZUJsb2NrcykgXAogICAgIHYoRE9NR0NPdXRwdXQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWYyY2I1Y2NiMWFhOWFj
NWU0NGE2MDIzZDU0NmZkYTM0ZmQzOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRQbGFuLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCitu
YW1lc3BhY2UgSlNDIHsKKworQmFzZWxpbmVKSVRQbGFuOjpCYXNlbGluZUpJVFBsYW4oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
KyAgICA6IEpJVFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSwgY29kZUJsb2NrKQor
ICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCit7CisgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21w
aWxlKCk7Cit9CisKK2F1dG8gQmFzZWxpbmVKSVRQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkg
LT4gQ29tcGlsYXRpb25QYXRoCit7CisgICAgbV9qaXQuY29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluZyhKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBCYXNlbGluZVBhdGg7
Cit9CisKK3NpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9qaXQuY29kZVNpemUoKTsKK30KKworQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVK
SVRQbGFuOjpmaW5hbGl6ZSgpCit7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9q
aXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNh
c2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2Rl
QmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlv
biBmYWlsZWQuIik7CisgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIFdU
Rjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOworICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJs
b2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg1NmUwMTA4YzU2OTc2OTM1MzZjZWVj
MmNhMTU1ZjgwOGMzMjhjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SklUUGxhbi5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQmFzZWxpbmVKSVRQbGFuIGZpbmFsIDogcHVibGljIEpJVFBs
YW4geworICAgIHVzaW5nIEJhc2UgPSBKSVRQbGFuOworCitwdWJsaWM6CisgICAgQmFzZWxpbmVK
SVRQbGFuKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisKKyAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbCgpIGZpbmFsOwor
ICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSklUIG1faml0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCmluZGV4IGJhMmRlM2I2MGZhZGNlZjVjZTU5ZGIzODU2ZTYwMGEzZDM0NDIw
OGEuLjU1NTYzMDM3YWViNThmZWM5YjNmMDNmN2NmZWUxZmMwZGUzZWNlMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKQEAgLTY2MiwxMCArNjYyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIE1vbm90b25pY1RpbWUg
YmVmb3JlIHsgfTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkKLSAg
ICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgCiAgICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAg
c3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgpAQCAtODIxLDIw
ICs4MTcsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2Rl
T3JpZ2luKCkpOwogCiAgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwotCi0gICAgTW9ub3RvbmljVGltZSBhZnRlciB7IH07
Ci0gICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKLSAgICAgICAgYWZ0
ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0
VG90YWxDb21waWxlVGltZXMoKSkKLSAgICAgICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGlt
ZSArPSBhZnRlciAtIGJlZm9yZTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBp
bGVUaW1lcygpKSkgewotICAgICAgICBDU3RyaW5nIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBj
b2RlQmxvY2tOYW1lLCAiIHdpdGggQmFzZWxpbmUgSklUIGludG8gIiwgbV9saW5rQnVmZmVyLT5z
aXplKCksICIgYnl0ZXMgaW4gIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBt
cy5cbiIpOwotICAgIH0KLQogICAgIGxpbmsoKTsKIH0KIApAQCAtMTAxOCw2ICsxMDAwLDEzIEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQogICAgIHJldHVy
biBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3NpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fbGlua0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOworfQorCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnBy
aXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKQEAgLTEwNzQsMjEgKzEwNjMsMTEgQEAg
aW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29k
ZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCi1ib29sIEpJVDo6cmVwb3J0Q29tcGlsZVRpbWVz
KCkKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkgfHwgT3B0aW9u
czo6cmVwb3J0QmFzZWxpbmVDb21waWxlVGltZXMoKTsKLX0KLQotYm9vbCBKSVQ6OmNvbXB1dGVD
b21waWxlVGltZXMoKQotewotICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKSB8fCBPcHRp
b25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpOwotfQotCiBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBT
ZWNvbmRzPiByZXN1bHQ7CiAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVz
KCkpIHsKLSAgICAgICAgcmVzdWx0LmFkZCgiVG90YWwgQ29tcGlsZSBUaW1lIiwgdG90YWxCYXNl
bGluZUNvbXBpbGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRp
bWUpOworICAgICAgICByZXN1bHQuYWRkKCJUb3RhbCBDb21waWxlIFRpbWUiLCB0b3RhbENvbXBp
bGVUaW1lKCkpOwogICAgICAgICByZXN1bHQuYWRkKCJCYXNlbGluZSBDb21waWxlIFRpbWUiLCB0
b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBy
ZXN1bHQuYWRkKCJERkcgQ29tcGlsZSBUaW1lIiwgdG90YWxERkdDb21waWxlVGltZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAppbmRleCBjYjhiNGExMDA2ZTBhYTk4YzRmZmEyOTk1ZmJlZTJlYjll
ZDk1Yzc3Li43NWM5Y2I5NmIxMzY1MzJmMDg2MWYyZjBhODA1OGVmYzZiMDU2YjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKQEAgLTIxNiw2ICsyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRp
b25FZmZvcnQpOwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVh
ZCgpOworICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yjg5ZThlMDRlZTEyNjM3ODg2ZmQyOGY0YTRiYWI2MGIwYzQxNTZkNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25LZXku
aCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3ZvaWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dC5wcmludCgiKENvbXBpbGUgb2Yg
IiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzczY2EyYWEwNGQwZmZlN2RlY2U1NDU0MDBj
YzMzZmIxNmZjY2ZlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSklUQ29tcGlsYXRpb25Nb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIENvZGVCbG9ja1NldDsK
KworY2xhc3MgSklUQ29tcGlsYXRpb25LZXkgeworcHVibGljOgorICAgIEpJVENvbXBpbGF0aW9u
S2V5KCkKKyAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBtX21v
ZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCisgICAgeworICAgIH0K
KyAgICAKKyAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgICwgbV9tb2Rl
KEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSklUQ29t
cGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUg
bW9kZSkKKyAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICAgICAg
LCBtX21vZGUobW9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9
PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJ
bnZhbGlkQ29tcGlsYXRpb247CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQorICAgIEpJVENvbXBpbGF0
aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisg
ICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRI
YXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0
aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPiht
X21vZGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgSklUQ29t
cGlsYXRpb25Nb2RlIG1fbW9kZTsKK307CisKK3N0cnVjdCBKSVRDb21waWxhdGlvbktleUhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBKSVRD
b21waWxhdGlvbktleSYgYSwgY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6SklUQ29tcGlsYXRpb25LZXk+IDogSlNDOjpKSVRD
b21waWxhdGlvbktleUhhc2ggeyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpKSVRDb21waWxhdGlv
bktleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpKSVRDb21waWxhdGlvbktleT4geyB9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29tcGlsYXRpb25Nb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTlkMzk0YTQ2N2M1ZmRkNjhmZmUy
ZjljMmZiNTI1NmE3NDIyMDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9uTW9kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWRDb21waWxhdGlvbk1vZGUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKKyAg
ICAgICAgb3V0LnByaW50KCJCYXNlbGluZU1vZGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSklUQ29tcGlsYXRpb25Nb2RlOjpERkc6CisgICAgICAgIG91dC5wcmludCgiREZHTW9kZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAg
ICAgICAgb3V0LnByaW50KCJGVExNb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpJ
VENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6CisgICAgICAgIG91dC5wcmludCgiRlRM
Rm9yT1NSRW50cnlNb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b21waWxhdGlvbk1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRp
b25Nb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JjMGUwN2ZmNTNjYTMxNTk5YjU2OGVmYTIxNTkxYTYzMmNi
OTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25Nb2RlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBKSVRDb21waWxhdGlv
bk1vZGUgeworICAgIEludmFsaWRDb21waWxhdGlvbiwKKyAgICBCYXNlbGluZSwKKyAgICBERkcs
CisgICAgRlRMLAorICAgIEZUTEZvck9TUkVudHJ5Cit9OworCitpbmxpbmUgYm9vbCBpc0ZUTChK
SVRDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpG
VExGb3JPU1JFbnRyeToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkpJVENv
bXBpbGF0aW9uTW9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggOGVkZGY2ZGJjMjNlYWU3ZjkyMDAxNGQ4
NGU1MGEwOTAwN2IzYzdjZi4uMjFhZjM2NTMwOWQyNzkzMzcxZGU2ZWI0MDBiNDQ2OGFhODM3MGIy
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0z
MiwxMSArMzIsOSBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lu
bGluZXMuaCIKLSNpbmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJERkdE
cml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5o
IgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25GdXp6LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCkBAIC00Niw2
ICs0NCw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgog
I2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0FzeW5jRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU0FzeW5jR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9u
LmgiCkBAIC0xODk4LDQwICsxODk3LDI4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAKLSAgICAv
LyBXZSBjYW5ub3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9u
IGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1pemVkCi0gICAgLy8gcmVwbGFjZW1lbnQuCi0gICAgREZH
OjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51
bGwoKTsKLSAgICBBU1NFUlQoCi0gICAgICAgICF3b3JrbGlzdAotICAgICAgICB8fCAhKHdvcmts
aXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6Q29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBERkc6
OkRGR01vZGUpKSAhPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bgotICAgICAgICAmJiBjb2RlQmxv
Y2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpKTsKLQotICAgIERGRzo6V29ya2xpc3Q6OlN0
YXRlIHdvcmtsaXN0U3RhdGU7Ci0gICAgaWYgKHdvcmtsaXN0KSB7Ci0gICAgICAgIC8vIFRoZSBj
YWxsIHRvIERGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKCkgd2lsbCBj
b21wbGV0ZSBhbGwgcmVhZHkKLSAgICAgICAgLy8gKGkuZS4gY29tcGlsZWQpIGNvZGUgYmxvY2tz
LiBCdXQgaWYgaXQgY29tcGxldGVzIG91cnMsIHdlIGFsc28gbmVlZCB0byBrbm93Ci0gICAgICAg
IC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBh
dHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKLSAgICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIFRoaXMg
d2lsbCBoYXZlIGFscmVhZHkgYWxzbyBzZXQgdGhlIGFwcHJvcHJpYXRlIEpJVCBleGVjdXRpb24K
LSAgICAgICAgLy8gY291bnQgdGhyZXNob2xkIGRlcGVuZGluZyBvbiB3aGF0IGhhcHBlbmVkLCBz
byBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGFueXRoaW5nCi0gICAgICAgIC8vIGJ1dCBzdWNjZXNz
ZnVsIHdlIGp1c3Qgd2FudCB0byByZXR1cm4gZWFybHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xp
c3RTdGF0ZSA9PQotICAgICAgICAvLyBERkc6OldvcmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCi0g
ICAgICAgIAotICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5
IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKCkKLSAgICAgICAgLy8gaGVy
ZSwgYW5kIGlmIGl0IHJldHVybmVkIENvbXBpbGVkLCB3ZSBjb3VsZCBoYXZlIHRoZW4gY2FsbGVk
Ci0gICAgICAgIC8vIGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoKSBiZWxvdy4gQnV0IHRoYXQgd291
bGQgaGF2ZSBtZWFudCB0aGF0IGl0IGNvdWxkIHRha2UKLSAgICAgICAgLy8gbG9uZ2VyIGZvciBj
b2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkgd291bGQgb25seSBjb21wbGV0ZSB3aGVu
ICp0aGVpcioKLSAgICAgICAgLy8gZXhlY3V0aW9uIGNvdW50IHRyaWdnZXIgZmlyZWQ7IGJ1dCB0
aGF0IGNvdWxkIHRha2UgYSB3aGlsZSBzaW5jZSB0aGUgZmlyaW5nIGlzCi0gICAgICAgIC8vIHJh
Y3kuIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0IGNvZGUgYmxvY2tzIHRoYXQgbmV2ZXIgcnVuIGFn
YWluIGFmdGVyIGJlaW5nCi0gICAgICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUgd29y
a2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCi0gICAgICAgIC8vIHBy
b2JhYmx5IGEgd2FzdGUgb2YgbWVtb3J5LiBPdXIgZ29hbCBoZXJlIGlzIHRvIGNvbXBsZXRlIGNv
ZGUgYmxvY2tzIGFzIHNvb24gYXMKLSAgICAgICAgLy8gcG9zc2libGUgaW4gb3JkZXIgdG8gbWlu
aW1pemUgdGhlIGNoYW5jZXMgb2YgdXMgZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUgYWZ0ZXIKLSAg
ICAgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMgYWxyZWFkeSBhdmFpbGFibGUuCi0gICAgICAgIHdv
cmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAg
ICAgICAgICB2bSwgREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkp
OwotICAgIH0gZWxzZQotICAgICAgICB3b3JrbGlzdFN0YXRlID0gREZHOjpXb3JrbGlzdDo6Tm90
S25vd247Ci0KLSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxp
bmcpIHsKKyAgICAvLyBUaGUgY2FsbCB0byBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBs
YW5zRm9yVk0oKSB3aWxsIGNvbXBsZXRlIGFsbCByZWFkeQorICAgIC8vIChpLmUuIGNvbXBpbGVk
KSBjb2RlIGJsb2Nrcy4gQnV0IGlmIGl0IGNvbXBsZXRlcyBvdXJzLCB3ZSBhbHNvIG5lZWQgdG8g
a25vdworICAgIC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFo
ZWFkIGFuZCBhdHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKKyAgICAvLyByZW9wdGltaXphdGlvbi4g
VGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1
dGlvbgorICAgIC8vIGNvdW50IHRocmVzaG9sZCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCwg
c28gaWYgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbnl0aGluZworICAgIC8vIGJ1dCBzdWNjZXNzZnVs
IHdlIGp1c3Qgd2FudCB0byByZXR1cm4gZWFybHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RT
dGF0ZSA9PQorICAgIC8vIEpJVFdvcmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCisKKyAgICAvLyBO
b3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0
Ojpjb21waWxhdGlvblN0YXRlKCkKKyAgICAvLyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29t
cGlsZWQsIHdlIGNvdWxkIGhhdmUgdGhlbiBjYWxsZWQKKyAgICAvLyBjb21wbGV0ZUFuZFNjaGVk
dWxlT1NSKCkgYmVsb3cuIEJ1dCB0aGF0IHdvdWxkIGhhdmUgbWVhbnQgdGhhdCBpdCBjb3VsZCB0
YWtlCisgICAgLy8gbG9uZ2VyIGZvciBjb2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkg
d291bGQgb25seSBjb21wbGV0ZSB3aGVuICp0aGVpcioKKyAgICAvLyBleGVjdXRpb24gY291bnQg
dHJpZ2dlciBmaXJlZDsgYnV0IHRoYXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJp
bmcgaXMKKyAgICAvLyByYWN5LiBJdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCBjb2RlIGJsb2NrcyB0
aGF0IG5ldmVyIHJ1biBhZ2FpbiBhZnRlciBiZWluZworICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNp
dCBvbiB0aGUgd29ya2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCisg
ICAgLy8gcHJvYmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29t
cGxldGUgY29kZSBibG9ja3MgYXMgc29vbiBhcworICAgIC8vIHBvc3NpYmxlIGluIG9yZGVyIHRv
IG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIHVzIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlIGFmdGVy
CisgICAgLy8gb3B0aW1pemVkIGNvZGUgaXMgYWxyZWFkeSBhdmFpbGFibGUuCisgICAgSklUV29y
a2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgdm0sIEpJVENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpKTsKKworICAgIGlm
ICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxpbmcpIHsKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImNvbXBp
bGluZyIpKTsKICAgICAgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5j
aHJvbm91cyBjb21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAogICAgICAgICAv
LyByZXBsYWNlbWVudC4KQEAgLTE5NDAsNyArMTkyNyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRl
ciwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9
CiAKLSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgewor
ICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewogICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBidXQgd2UgZGlk
IGp1c3QgZ2V0IGNvbXBpbGVkLCB0aGVuCiAgICAgICAgIC8vIHRoZSBjb21waWxhdGlvbiBmYWls
ZWQgb3Igd2FzIGludmFsaWRhdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBleGVjdXRpb24gY291bnQK
ICAgICAgICAgLy8gdGhyZXNob2xkcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVs
eSBieQpAQCAtMjAwMyw3ICsxOTkwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbk9wdGltaXplLCBTbG93UGF0aFJldHVyblR5cGUsIChWTSogdm1Qb2ludGVyLAogCiAgICAg
ICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxh
Y2VtZW50KCk7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGls
ZSgKLSAgICAgICAgICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9jaywgbnVsbHB0ciwgREZHOjpE
RkdNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJs
b2NrLCBudWxscHRyLCBKSVRDb21waWxhdGlvbk1vZGU6OkRGRywgYnl0ZWNvZGVJbmRleCwKICAg
ICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjNkODgyM2Q4ZmZjMzM0NDEwNjk2MzEyYzUyM2ZjNjJiNDAxMDA3MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKQEAgLTAs
MCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUUGxhbi5oIgorCisjaWYgRU5BQkxF
KEpJVCkKKworI2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2V4dGVybiBTZWNvbmRzIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZTsKK2V4dGVy
biBTZWNvbmRzIHRvdGFsREZHQ29tcGlsZVRpbWU7CitleHRlcm4gU2Vjb25kcyB0b3RhbEZUTENv
bXBpbGVUaW1lOworZXh0ZXJuIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKK2V4dGVy
biBTZWNvbmRzIHRvdGFsRlRMQjNDb21waWxlVGltZTsKKworSklUUGxhbjo6SklUUGxhbihKSVRD
b21waWxhdGlvbk1vZGUgbW9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX21vZGUo
bW9kZSkKKyAgICAsIG1fdm0oJmNvZGVCbG9jay0+dm0oKSkKKyAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKK3sKK30KKwordm9pZCBKSVRQbGFuOjpjYW5jZWwoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc3RhZ2UgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCk7CisgICAgQVNTRVJUKG1f
dm0pOworICAgIG1fc3RhZ2UgPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkOworICAgIG1fdm0gPSBu
dWxscHRyOworICAgIG1fY29kZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBKSVRQbGFuOjpu
b3RpZnlDb21waWxpbmcoKQoreworICAgIG1fc3RhZ2UgPSBKSVRQbGFuU3RhZ2U6OkNvbXBpbGlu
ZzsKK30KKwordm9pZCBKSVRQbGFuOjpub3RpZnlSZWFkeSgpCit7CisgICAgbV9zdGFnZSA9IEpJ
VFBsYW5TdGFnZTo6UmVhZHk7Cit9CisKK2F1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRp
ZXIKK3sKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2Rl
OjpJbnZhbGlkQ29tcGlsYXRpb246CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBUaWVyOjpCYXNlbGluZTsKKyAgICBjYXNlIEpJVENvbXBpbGF0
aW9uTW9kZTo6QmFzZWxpbmU6CisgICAgICAgIHJldHVybiBUaWVyOjpCYXNlbGluZTsKKyAgICBj
YXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6REZHOgorICAgICAgICByZXR1cm4gVGllcjo6REZHOwor
ICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6CisgICAgY2FzZSBKSVRDb21waWxhdGlv
bk1vZGU6OkZUTEZvck9TUkVudHJ5OgorICAgICAgICByZXR1cm4gVGllcjo6RlRMOworICAgIH0K
K30KKworSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKK3sKKyAgICByZXR1cm4gSklU
Q29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2Rl
KTsKK30KKworYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKK3sKKyAgICBp
ZiAobV9zdGFnZSA9PSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFtX3ZtLT5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIGlmIChtX3N0YWdlID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEpJVFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJz
dHJhY3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sq
KT4mIGZ1bmMpCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgorICAgIGZ1bmMobV9jb2RlQmxvY2spOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJ
VFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X2NvZGVCbG9jayk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSklUUGxhbjo6Y29tcHV0
ZUNvbXBpbGVUaW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcG9ydENvbXBpbGVUaW1lcygp
CisgICAgICAgIHx8IE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkKKyAgICAgICAg
fHwgKG1fdm0gJiYgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKTsKK30KKworYm9vbCBKSVRQ
bGFuOjpyZXBvcnRDb21waWxlVGltZXMoKSBjb25zdAoreworICAgIHJldHVybiBPcHRpb25zOjpy
ZXBvcnRDb21waWxlVGltZXMoKQorICAgICAgICB8fCAoT3B0aW9uczo6cmVwb3J0QmFzZWxpbmVD
b21waWxlVGltZXMoKSAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkK
KyAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9ydERGR0NvbXBpbGVUaW1lcygpICYmIG1fbW9kZSA9
PSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKKyAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9ydEZU
TENvbXBpbGVUaW1lcygpICYmIGlzRlRMKCkpOworfQorCit2b2lkIEpJVFBsYW46OmNvbXBpbGVJ
blRocmVhZChKSVRXb3JrbGlzdFRocmVhZCogdGhyZWFkKQoreworICAgIG1fdGhyZWFkID0gdGhy
ZWFkOworCisgICAgTW9ub3RvbmljVGltZSBiZWZvcmU7CisgICAgQ1N0cmluZyBjb2RlQmxvY2tO
YW1lOworICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKQorICAgICAgICBi
ZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29t
cGlsZVRpbWVzKCkpKQorICAgICAgICBjb2RlQmxvY2tOYW1lID0gdG9DU3RyaW5nKCptX2NvZGVC
bG9jayk7CisKKyAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7CisKKyAgICBp
ZiAoREZHOjpsb2dDb21waWxhdGlvbkNoYW5nZXMobV9tb2RlKSB8fCBPcHRpb25zOjpsb2dQaGFz
ZVRpbWVzKCkpCisgICAgICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKm1fY29k
ZUJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiLCBpbnN0cnVjdGlvbnMgc2l6ZSA9ICIsIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCksICJcbiIpOworCisgICAgQ29tcGlsYXRpb25QYXRo
IHBhdGggPSBjb21waWxlSW5UaHJlYWRJbXBsKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCgocGF0
aCA9PSBDYW5jZWxQYXRoKSA9PSAobV9zdGFnZSA9PSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKSk7
CisKKyAgICBNb25vdG9uaWNUaW1lIGFmdGVyOworICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29t
cGlsZVRpbWVzKCkpKSB7CisgICAgICAgIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChpc0ZUTCgpKSB7CisgICAgICAgICAgICAgICAgdG90YWxGVExDb21waWxlVGlt
ZSArPSBhZnRlciAtIGJlZm9yZTsKKyAgICAgICAgICAgICAgICB0b3RhbEZUTERGR0NvbXBpbGVU
aW1lICs9IG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKKyAgICAgICAgICAgICAgICB0b3RhbEZU
TEIzQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEw7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1vZGUoKSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKQorICAgICAg
ICAgICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0b3RhbERGR0NvbXBpbGVUaW1lICs9IGFm
dGVyIC0gYmVmb3JlOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHBhdGhOYW1l
ID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHBhdGgpIHsKKyAgICBjYXNlIEZhaWxQYXRoOgorICAg
ICAgICBwYXRoTmFtZSA9ICJOL0EgKGZhaWwpIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
YXNlbGluZVBhdGg6CisgICAgICAgIHBhdGhOYW1lID0gIkJhc2VsaW5lIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBERkdQYXRoOgorICAgICAgICBwYXRoTmFtZSA9ICJERkciOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZUTFBhdGg6CisgICAgICAgIHBhdGhOYW1lID0gIkZUTCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FuY2VsUGF0aDoKKyAgICAgICAgcGF0aE5hbWUgPSAi
Q2FuY2VsZWQiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKG1f
Y29kZUJsb2NrKSB7IC8vIG1fY29kZUJsb2NrIHdpbGwgYmUgbnVsbCBpZiB0aGUgY29tcGlsYXRp
b24gd2FzIGNhbmNlbGxlZC4KKyAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKKyAgICAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJmdGxDb21waWxlIiwgKCJ0b29r
ICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERGRzogIiwgKG1fdGlt
ZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIgLSBt
X3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBhdGhOYW1lKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ss
ICJkZmdDb21waWxlIiwgKCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCks
ICIgbXMgd2l0aCAiLCBwYXRoTmFtZSkpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkocmVwb3J0
Q29tcGlsZVRpbWVzKCkpKSB7CisgICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxv
Y2tOYW1lLCAiIHVzaW5nICIsIG1fbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGludG8gIiwg
Y29kZVNpemUoKSwgIiBieXRlcyBpbiAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygp
LCAiIG1zIik7CisgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCisgICAgICAgICAgICBkYXRh
TG9nKCIgKERGRzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCks
ICIsIEIzOiAiLCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSIp
OworICAgICAgICBkYXRhTG9nKCIuXG4iKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxh
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhOGRmNGE3NDk2MGI5ZGQwODdiZjM3YjUzMWIwMjRmYTFhMTNiNDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uaApA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvbXBp
bGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25LZXkuaCIKKyNpbmNsdWRl
ICJKSVRDb21waWxhdGlvbk1vZGUuaCIKKyNpbmNsdWRlICJKSVRQbGFuU3RhZ2UuaCIKKyNpbmNs
dWRlICJSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBDb2RlQmxvY2s7Citj
bGFzcyBKSVRXb3JrbGlzdFRocmVhZDsKK2NsYXNzIFZNOworCitjbGFzcyBKSVRQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFBsYW4+IHsKK3Byb3RlY3RlZDoKKyAgICBKSVRQ
bGFuKEpJVENvbXBpbGF0aW9uTW9kZSwgQ29kZUJsb2NrKik7CisKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5KSVRQbGFuKCkgeyB9CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsg
fQorICAgIEpJVFdvcmtsaXN0VGhyZWFkKiB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVh
ZDsgfQorCisgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KKworICAgIEpJVFBsYW5TdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhZ2U7
IH0KKyAgICBib29sIGlzRlRMKCkgY29uc3QgeyByZXR1cm4gOjpKU0M6OmlzRlRMKG1fbW9kZSk7
IH0KKworICAgIGVudW0gY2xhc3MgVGllciB7IEJhc2VsaW5lID0gMCwgREZHID0gMSwgRlRMID0g
MiwgQ291bnQgPSAzIH07CisgICAgVGllciB0aWVyKCkgY29uc3Q7CisKKyAgICBKSVRDb21waWxh
dGlvbktleSBrZXkoKTsKKworICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKEpJVFdvcmtsaXN0VGhy
ZWFkKik7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVJbkdDKCkgeyB9CisKKyAgICB2b2lkIG5vdGlmeUNvbXBpbGluZygpOwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlSZWFkeSgpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwo
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CisgICAgdmly
dHVhbCBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNp
dG9yJiwgY29uc3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwor
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7CisgICAg
Ym9vbCByZXBvcnRDb21waWxlVGltZXMoKSBjb25zdDsKKworICAgIGVudW0gQ29tcGlsYXRpb25Q
YXRoIHsgRmFpbFBhdGgsIEJhc2VsaW5lUGF0aCwgREZHUGF0aCwgRlRMUGF0aCwgQ2FuY2VsUGF0
aCB9OworICAgIHZpcnR1YWwgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRocmVhZEltcGwoKSA9
IDA7CisKKyAgICBKSVRQbGFuU3RhZ2UgbV9zdGFnZSB7IEpJVFBsYW5TdGFnZTo6UHJlcGFyaW5n
IH07CisgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKKyAgICBNb25vdG9uaWNUaW1lIG1f
dGltZUJlZm9yZUZUTDsKKyAgICBWTSogbV92bTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIEpJVFdvcmtsaXN0VGhyZWFkKiBtX3RocmVhZCB7IG51bGxwdHIgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFBsYW5TdGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YjJmZjRlZjJjYWJhNzgyMDdl
NTc2YmViZjNiOTczMzZkYTY4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFBsYW5TdGFnZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBKU0MgeworCitlbnVtIGNsYXNzIEpJVFBsYW5TdGFnZSB7CisgICAgUHJlcGFyaW5nLAorICAg
IENvbXBpbGluZywKKyAgICBSZWFkeSwKKyAgICBDYW5jZWxlZCwKK307CisKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNhZmVw
b2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNhZmVwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODdkOTg1OTY4YThkMjZkZjJmNDAzZDg3MjQ1NDRhMmQwMzk1NmM1ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2FmZXBvaW50LmNwcApA
QCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQu
aCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRQbGFuLmgiCisjaW5jbHVkZSAi
SklUU2Nhbm5hYmxlLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKyNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2FmZXBvaW50OjpSZXN1bHQ6
On5SZXN1bHQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fd2FzQ2hlY2tlZCk7Cit9CisKK2Jv
b2wgU2FmZXBvaW50OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxlZCgpCit7CisgICAgbV93YXNDaGVj
a2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gbV9kaWRHZXRDYW5jZWxsZWQ7Cit9CisKK1NhZmVwb2lu
dDo6U2FmZXBvaW50KEpJVFBsYW4mIHBsYW4sIFJlc3VsdCYgcmVzdWx0KQorICAgIDogbV92bShw
bGFuLnZtKCkpCisgICAgLCBtX3BsYW4ocGxhbikKKyAgICAsIG1fZGlkQ2FsbEJlZ2luKGZhbHNl
KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5t
X3dhc0NoZWNrZWQpOworICAgIHJlc3VsdC5tX3dhc0NoZWNrZWQgPSBmYWxzZTsKKyAgICByZXN1
bHQubV9kaWRHZXRDYW5jZWxsZWQgPSBmYWxzZTsKK30KKworU2FmZXBvaW50Ojp+U2FmZXBvaW50
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgaWYgKEpJVFdv
cmtsaXN0VGhyZWFkKiB0aHJlYWQgPSBtX3BsYW4udGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGhyZWFkLT5tX3NhZmVwb2ludCA9PSB0aGlzKTsKKyAgICAgICAgdGhyZWFkLT5t
X3JpZ2h0VG9SdW4ubG9jaygpOworICAgICAgICB0aHJlYWQtPm1fc2FmZXBvaW50ID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKK3ZvaWQgU2FmZXBvaW50OjphZGQoU2Nhbm5hYmxlKiBzY2FubmFibGUp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKKyAgICBtX3NjYW5uYWJs
ZXMuYXBwZW5kKHNjYW5uYWJsZSk7Cit9CisKK3ZvaWQgU2FmZXBvaW50OjpiZWdpbigpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKKyAgICBtX2RpZENhbGxCZWdpbiA9
IHRydWU7CisgICAgaWYgKEpJVFdvcmtsaXN0VGhyZWFkKiBkYXRhID0gbV9wbGFuLnRocmVhZCgp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5tX3NhZmVwb2ludCk7CisgICAgICAg
IGRhdGEtPm1fc2FmZXBvaW50ID0gdGhpczsKKyAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLnVu
bG9ja0ZhaXJseSgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3Zv
aWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKworICAgIGlmICht
X3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSB3ZXJlIGNh
bmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEKKyAgICAKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9zY2FubmFi
bGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFNhZmVw
b2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwordGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFNhZmVw
b2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgCisgICAgaWYgKG1fcmVzdWx0Lm1f
ZGlkR2V0Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxs
ZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0
aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgorICAgIAorICAgIHJl
dHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcik7Cit9CisKK3RlbXBs
YXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RW
aXNpdG9yJik7Cit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoU2xvdFZpc2l0b3ImKTsKKworYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBp
ZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBX
ZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mg
d2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24u
CisgICAgCisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCk7Cit9CisK
K3ZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2Fs
bEJlZ2luKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQp
OyAvLyBXZSBjYW5ub3QgZ2V0IGNhbmNlbGxlZCB0d2ljZSBiZWNhdXNlIHN1YnNlcXVlbnQgR0Nz
IHdpbGwgdGhpbmsgdGhhdCB3ZSdyZSBhbGl2ZSBhbmQgdGhleSB3aWxsIG5vdCBkbyBhbnl0aGlu
ZyB0byB1cy4KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4uc3RhZ2UoKSA9PSBKSVRQ
bGFuU3RhZ2U6OkNhbmNlbGVkKTsKKyAgICBtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IHRy
dWU7CisgICAgbV92bSA9IG51bGxwdHI7Cit9CisKK1ZNKiBTYWZlcG9pbnQ6OnZtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92bTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNhZmVwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTYWZlcG9pbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mMzEzMDk3MGI4MDY3MTBiMWQ5ZGVjODJlMmFmNDIxMDFlY2Q1OTUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTYWZlcG9pbnQuaApA
QCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUUGxhbjsKK2NsYXNz
IFNjYW5uYWJsZTsKK2NsYXNzIFZNOworCitjbGFzcyBTYWZlcG9pbnQgeworcHVibGljOgorICAg
IGNsYXNzIFJlc3VsdCB7CisgICAgcHVibGljOgorICAgICAgICBSZXN1bHQoKQorICAgICAgICAg
ICAgOiBtX2RpZEdldENhbmNlbGxlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV93YXNDaGVja2Vk
KHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgflJlc3VsdCgp
OworICAgICAgICAKKyAgICAgICAgYm9vbCBkaWRHZXRDYW5jZWxsZWQoKTsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgbV9kaWRHZXRDYW5jZWxsZWQ7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2Vk
OworICAgIH07CisgICAgCisgICAgU2FmZXBvaW50KEpJVFBsYW4mLCBSZXN1bHQmKTsKKyAgICB+
U2FmZXBvaW50KCk7CisgICAgCisgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CisgICAgCisgICAg
dm9pZCBiZWdpbigpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKKyAgICAK
KyAgICBWTSogdm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2Fu
Y2VsbGVkLgorCitwcml2YXRlOgorICAgIFZNKiBtX3ZtOworICAgIEpJVFBsYW4mIG1fcGxhbjsK
KyAgICBWZWN0b3I8U2Nhbm5hYmxlKj4gbV9zY2FubmFibGVzOworICAgIGJvb2wgbV9kaWRDYWxs
QmVnaW47CisgICAgUmVzdWx0JiBtX3Jlc3VsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2Nhbm5hYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNjYW5u
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE1NjZkOTNlZjFjMzI5MTk4MmI1YjRjYTc4ZDE0MjlmNzlkYTZi
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNjYW5u
YWJsZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgU2xvdFZp
c2l0b3I7CisKK2NsYXNzIFNjYW5uYWJsZSB7CitwdWJsaWM6CisgICAgU2Nhbm5hYmxlKCkgeyB9
CisgICAgdmlydHVhbCB+U2Nhbm5hYmxlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRD
aGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
b3JrbGlzdC5jcHAKaW5kZXggYTk2ODk3NGJkNmE5ODIzYjkwYWFkYzQ0YTQxNGE1MzdhOTAzY2Y3
YS4uOTc4YmRkNDFiZmJjOGMyNDAyYzBiODFhYTk2OGVjZWZmZmNlODcyYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwyOTYgKzI4LDMyNCBAQAog
CiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVFNhZmVw
b2ludC5oIgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0VGhyZWFkLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGlsYXRp
b25UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpJVFdvcmtsaXN0OjpQbGFu
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7Ci1wdWJs
aWM6Ci0gICAgUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAg
ICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQ29tcGlsZSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgp
Ci0gICAgewotICAgICAgICBtX2ppdC5jb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIAotICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07Ci0gICAgICAgIG1faXNGaW5pc2hlZENvbXBpbGluZyA9IHRydWU7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZmluYWxpemUoYm9vbCBuZWVkc0ZlbmNlKQotICAgIHsKLSAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsK
LSAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKLSAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJ
VENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKLSAgICAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIp
OwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAg
ICAgICAgICBpZiAobmVlZHNGZW5jZSkKLSAgICAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0o
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+dm0oKTsgfQotICAgIAotICAgIGJvb2wgaXNGaW5pc2hl
ZENvbXBpbGluZygpCi0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07Ci0g
ICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7Ci0gICAgfQotICAgIAotICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVPbk1haW5UaHJlYWROb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFBs
YW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBw
bGFuLmNvbXBpbGVJblRocmVhZCgpOwotICAgICAgICBwbGFuLmZpbmFsaXplKGZhbHNlKTsKLSAg
ICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgSklU
IG1faml0OwotICAgIExvY2sgbV9sb2NrOwotICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5n
IHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIEpJVFdvcmtsaXN0OjpUaHJlYWQgZmluYWwgOiBwdWJs
aWMgQXV0b21hdGljVGhyZWFkIHsKLXB1YmxpYzoKLSAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgSklUV29ya2xpc3QmIHdvcmtsaXN0KQotICAgICAgICA6IEF1dG9tYXRp
Y1RocmVhZChsb2NrZXIsIHdvcmtsaXN0Lm1fbG9jaywgd29ya2xpc3QubV9jb25kaXRpb24uY29w
eVJlZigpKQotICAgICAgICAsIG1fd29ya2xpc3Qod29ya2xpc3QpCi0gICAgewotICAgICAgICBt
X3dvcmtsaXN0Lm1fbnVtQXZhaWxhYmxlVGhyZWFkcysrOwotICAgIH0KK0pJVFdvcmtsaXN0OjpK
SVRXb3JrbGlzdCgpCisgICAgOiBtX2xvY2soQm94PFVuY2hlY2tlZExvY2s+OjpjcmVhdGUoKSkK
KyAgICAsIG1fcGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkp
Cit7CisgICAgbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllciA9
IHsKKyAgICAgICAgT3B0aW9uczo6bnVtYmVyT2ZXb3JrbGlzdFRocmVhZHMoKSwKKyAgICAgICAg
T3B0aW9uczo6bnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKSwKKyAgICAgICAgT3B0aW9uczo6
bnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMoKSwKKyAgICB9OwogCi0gICAgY29uc3QgY2hhciog
bmFtZSgpIGNvbnN0IGZpbmFsCi0gICAgewotI2lmIE9TKExJTlVYKQotICAgICAgICByZXR1cm4g
IkpJVFdvcmtlciI7Ci0jZWxzZQotICAgICAgICByZXR1cm4gIkpJVCBXb3JrbGlzdCBIZWxwZXIg
VGhyZWFkIjsKLSNlbmRpZgotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUG9sbFJlc3VsdCBw
b2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgZmluYWwKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fd29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX3dvcmtsaXN0Lm1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IFBvbGxSZXN1bHQ6OldhaXQ7Ci0gICAgICAgIAotICAgICAgICBtX215UGxhbnMgPSBXVEZNb3Zl
KG1fd29ya2xpc3QubV9xdWV1ZSk7Ci0gICAgICAgIG1fd29ya2xpc3QubV9udW1BdmFpbGFibGVU
aHJlYWRzLS07Ci0gICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwotICAgIH0KLSAgICAK
LSAgICBXb3JrUmVzdWx0IHdvcmsoKSBmaW5hbAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fbXlQbGFucy5pc0VtcHR5KCkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChSZWZQdHI8
UGxhbj4mIHBsYW4gOiBtX215UGxhbnMpIHsKLSAgICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRo
cmVhZCgpOwotICAgICAgICAgICAgcGxhbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHRocmVhZCByZWFsaXplcyB0aGF0IHdl
IGp1c3QgY29tcGlsZWQgc29tZXRoaW5nLiBOb3RpZnlpbmcKLSAgICAgICAgICAgIC8vIGEgY29u
ZGl0aW9uIGlzIGJhc2ljYWxseSBmcmVlIGlmIG5vYm9keSBpcyB3YWl0aW5nLgotICAgICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICAgICAgbV93
b3JrbGlzdC5tX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG1fbXlQbGFucy5jbGVhcigpOwotICAgICAgICAKLSAgICAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICBtX3dvcmtsaXN0Lm1fbnVt
QXZhaWxhYmxlVGhyZWFkcysrOwotICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7
Ci0gICAgfQorICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IE9wdGlvbnM6Om51bWJlck9mV29ya2xpc3RUaHJlYWRzKCk7ICsraSkKKyAg
ICAgICAgbV90aHJlYWRzLmFwcGVuZChuZXcgSklUV29ya2xpc3RUaHJlYWQobG9ja2VyLCAqdGhp
cykpOworfQogCi0gICAgdm9pZCB0aHJlYWREaWRTdGFydCgpIGZpbmFsCi0gICAgewotICAgICAg
ICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CitK
SVRXb3JrbGlzdDo6fkpJVFdvcmtsaXN0KCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKK30KKworc3RhdGljIEpJVFdvcmtsaXN0KiB0aGVHbG9iYWxKSVRXb3JrbGlzdCB7IG51
bGxwdHIgfTsKKworSklUV29ya2xpc3QqIEpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdvcmts
aXN0T3JOdWxsKCkKK3sKKyAgICByZXR1cm4gdGhlR2xvYmFsSklUV29ya2xpc3Q7Cit9CisKK0pJ
VFdvcmtsaXN0JiBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKQoreworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBv
bmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICBhdXRvKiB3b3JrbGlzdCA9IG5ldyBKSVRX
b3JrbGlzdCgpOworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAg
ICAgIHRoZUdsb2JhbEpJVFdvcmtsaXN0ID0gd29ya2xpc3Q7CisgICAgICAgIH0pOworICAgIHJl
dHVybiAqdGhlR2xvYmFsSklUV29ya2xpc3Q7Cit9CisKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVFdv
cmtsaXN0OjplbnF1ZXVlKFJlZjxKSVRQbGFuPiBwbGFuKQoreworICAgIGlmICghT3B0aW9uczo6
dXNlQ29uY3VycmVudEpJVCgpKSB7CisgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChudWxs
cHRyKTsKKyAgICAgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgfQotICAgIAotICAg
IHZvaWQgdGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpIGZpbmFsCi0gICAg
ewotICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBudWxscHRyOworCisgICAgTG9ja2VyIGxv
Y2tlciB7ICptX2xvY2sgfTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVl
dWUoKSkgeworICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAg
ZGF0YUxvZygiOiBFbnF1ZXVlaW5nIHBsYW4gdG8gb3B0aW1pemUgIiwgcGxhbi0+a2V5KCksICJc
biIpOwogICAgIH0KKyAgICBBU1NFUlQobV9wbGFucy5maW5kKHBsYW4tPmtleSgpKSA9PSBtX3Bs
YW5zLmVuZCgpKTsKKyAgICBtX3BsYW5zLmFkZChwbGFuLT5rZXkoKSwgcGxhbi5jb3B5UmVmKCkp
OworICAgIG1fcXVldWVzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihwbGFuLT50aWVyKCkpXS5hcHBl
bmQoV1RGTW92ZShwbGFuKSk7CisgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIp
OworICAgIHJldHVybiBDb21waWxhdGlvbkRlZmVycmVkOworfQogCi0gICAgSklUV29ya2xpc3Qm
IG1fd29ya2xpc3Q7Ci0gICAgUGxhbnMgbV9teVBsYW5zOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvblNjb3BlPiBtX2NvbXBpbGF0aW9uU2NvcGU7Ci19Oworc2l6ZV90IEpJVFdvcmts
aXN0OjpxdWV1ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sg
fTsKKyAgICByZXR1cm4gcXVldWVMZW5ndGgobG9ja2VyKTsKK30KIAotSklUV29ya2xpc3Q6OkpJ
VFdvcmtsaXN0KCkKLSAgICA6IG1fbG9jayhCb3g8VW5jaGVja2VkTG9jaz46OmNyZWF0ZSgpKQot
ICAgICwgbV9jb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKK3Np
emVfdCBKSVRXb3JrbGlzdDo6cXVldWVMZW5ndGgoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25z
dAoreworICAgIHNpemVfdCBxdWV1ZUxlbmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpDb3VudCk7ICsraSkK
KyAgICAgICAgcXVldWVMZW5ndGggKz0gbV9xdWV1ZXNbaV0uc2l6ZSgpOworICAgIHJldHVybiBx
dWV1ZUxlbmd0aDsKK30KKwordm9pZCBKSVRXb3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMoKQor
eworICAgIG1fc3VzcGVuc2lvbkxvY2subG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1f
dGhyZWFkcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVu
LmxvY2soKTsKK30KKwordm9pZCBKSVRXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV90
aHJlYWRzW2ldLT5tX3JpZ2h0VG9SdW4udW5sb2NrKCk7CisgICAgbV9zdXNwZW5zaW9uTG9jay51
bmxvY2soKTsKK30KKworYXV0byBKSVRXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZShKSVRDb21w
aWxhdGlvbktleSBrZXkpIC0+IFN0YXRlCiB7CiAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sg
fTsKLSAgICBtX3RocmVhZCA9IG5ldyBUaHJlYWQobG9ja2VyLCAqdGhpcyk7CisgICAgY29uc3Qg
YXV0byYgaXRlciA9IG1fcGxhbnMuZmluZChrZXkpOworICAgIGlmIChpdGVyID09IG1fcGxhbnMu
ZW5kKCkpCisgICAgICAgIHJldHVybiBOb3RLbm93bjsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUt
PnN0YWdlKCkgPT0gSklUUGxhblN0YWdlOjpSZWFkeSA/IENvbXBpbGVkIDogQ29tcGlsaW5nOwog
fQogCi1KSVRXb3JrbGlzdDo6fkpJVFdvcmtsaXN0KCkKK2F1dG8gSklUV29ya2xpc3Q6OmNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgSklUQ29tcGlsYXRpb25LZXkgcmVxdWVzdGVk
S2V5KSAtPiBTdGF0ZQogewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8SklUUGxhbj4sIDg+
IG15UmVhZHlQbGFuczsKKyAgICByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIG15UmVhZHlQ
bGFucyk7CisKKyAgICBTdGF0ZSByZXN1bHRpbmdTdGF0ZSA9IE5vdEtub3duOworICAgIHdoaWxl
ICghbXlSZWFkeVBsYW5zLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8SklUUGxhbj4gcGxh
biA9IG15UmVhZHlQbGFucy50YWtlTGFzdCgpOworICAgICAgICBKSVRDb21waWxhdGlvbktleSBj
dXJyZW50S2V5ID0gcGxhbi0+a2V5KCk7CisKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgKnRoaXMsICI6IENvbXBsZXRpbmcgIiwgY3VycmVu
dEtleSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFu
U3RhZ2U6OlJlYWR5KTsKKworICAgICAgICBwbGFuLT5maW5hbGl6ZSgpOworCisgICAgICAgIGlm
IChjdXJyZW50S2V5ID09IHJlcXVlc3RlZEtleSkKKyAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRl
ID0gQ29tcGlsZWQ7CisgICAgfQorCisgICAgaWYgKCEhcmVxdWVzdGVkS2V5ICYmIHJlc3VsdGlu
Z1N0YXRlID09IE5vdEtub3duKSB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07
CisgICAgICAgIGlmIChtX3BsYW5zLmNvbnRhaW5zKHJlcXVlc3RlZEtleSkpCisgICAgICAgICAg
ICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
aW5nU3RhdGU7CiB9CiAKLWJvb2wgSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0oVk0mIHZt
KQorCit2b2lkIEpJVFdvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0m
IHZtKQogewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOworCisgICAgLy8gV2hpbGUgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBjb21waWxlciB0
byBmaW5pc2gsIHRoZSBjb2xsZWN0b3IgbWlnaHQgaGF2ZSBhbHJlYWR5IHN1c3BlbmRlZAorICAg
IC8vIHRoZSBjb21waWxlciBhbmQgdGhlbiBpdCB3aWxsIGJlIHdhaXRpbmcgZm9yIHVzIHRvIHN0
b3AuIFRoYXQncyBhIGRlYWRsb2NrLiBXZSBhdm9pZCB0aGF0CisgICAgLy8gZGVhZGxvY2sgYnkg
cmVsaW5xdWlzaGluZyBvdXIgaGVhcCBhY2Nlc3MsIHNvIHRoYXQgdGhlIGNvbGxlY3RvciBwcmV0
ZW5kcyB0aGF0IHdlIGFyZSBzdG9wcGVkCisgICAgLy8gZXZlbiBpZiB3ZSBhcmVuJ3QuCisgICAg
UmVsZWFzZUhlYXBBY2Nlc3NTY29wZSByZWxlYXNlSGVhcEFjY2Vzc1Njb3BlKHZtLmhlYXApOwor
CisgICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNv
bXBsZXRlLiBUaGUgaWRlYSBoZXJlCisgICAgLy8gaXMgdGhhdCB3ZSB3YW50IGFsbCBvZiB0aGUg
Y2FsbGVyIFZNJ3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3QgY2FyZQorICAgIC8vIGFib3V0
IGFueSBvdGhlciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0ZW1wdCB0byB3YWl0IG9uIHRo
b3NlLgorICAgIC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0
aG91Z2ggb3RoZXIgVk1zIG1heSBzdGlsbAorICAgIC8vIGJlIGFkZGluZyBwbGFucywgb3VyIFZN
IHdpbGwgbm90IGJlLgorICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICBkdW1wKGxvY2tl
ciwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiOiBXYWl0aW5nIGZvciBhbGwg
aW4gVk0gdG8gY29tcGxldGUuXG4iKTsKKyAgICB9CisKICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
IFZlY3RvcjxSZWZQdHI8UGxhbj4sIDMyPiBteVBsYW5zOwotICAgICAgICB7Ci0gICAgICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgICAgICAgIGJvb2wgZGlkRmluZFVuZmluaXNoZWRQbGFuID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgbV9wbGFucy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgICAgICAgICAg
WyZdIChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgm
cGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGls
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRGaW5kVW5maW5pc2hlZFBs
YW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG15UGxhbnMu
YXBwZW5kKFdURk1vdmUocGxhbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGZvdW5kIHBsYW5zIHRoZW4gd2Ugc2hvdWxkIGZpbmFsaXplIHRoZW0g
bm93LgotICAgICAgICAgICAgICAgIGlmICghbXlQbGFucy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElm
IHdlIGRvbid0IGZpbmQgcGxhbnMsIHRoZW4gd2UncmUgZWl0aGVyIGRvbmUgb3Igd2UgbmVlZCB0
byB3YWl0LCBkZXBlbmRpbmcgb24KLSAgICAgICAgICAgICAgICAvLyB3aGV0aGVyIHdlIGZvdW5k
IHNvbWUgdW5maW5pc2hlZCBwbGFucy4KLSAgICAgICAgICAgICAgICBpZiAoIWRpZEZpbmRVbmZp
bmlzaGVkUGxhbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+d2FpdCgqbV9sb2NrKTsKKyAg
ICAgICAgYm9vbCBhbGxBcmVDb21waWxlZCA9IHRydWU7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBtX3BsYW5zKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUtPnZtKCkg
IT0gJnZtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVudHJ5
LnZhbHVlLT5zdGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6UmVhZHkpIHsKKyAgICAgICAgICAgICAg
ICBhbGxBcmVDb21waWxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbXlQ
bGFucy5pc0VtcHR5KCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBmaW5hbGl6
ZVBsYW5zKG15UGxhbnMpOworCisgICAgICAgIGlmIChhbGxBcmVDb21waWxlZCkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIG1fcGxhbkNvbXBpbGVkLndhaXQoKm1fbG9jayk7CiAgICAg
fQogfQogCi12b2lkIEpJVFdvcmtsaXN0Ojpwb2xsKFZNJiB2bSkKK3ZvaWQgSklUV29ya2xpc3Q6
OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIFBsYW5zIG15UGxhbnM7Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgKm1fbG9jayB9OwotICAgICAgICBtX3BsYW5zLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAg
ICAgICAgWyZdIChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoJnBs
YW4tPnZtKCkgIT0gJnZtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBteVBsYW5zLmFwcGVuZChX
VEZNb3ZlKHBsYW4pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0pOwotICAgIH0KLSAgICAKLSAgICBmaW5hbGl6ZVBsYW5zKG15UGxhbnMpOworICAgIHdhaXRV
bnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgY29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0pOwogfQogCi12b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK3Zv
aWQgSklUV29ya2xpc3Q6OmNhbmNlbEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogewotICAgIERlZmVy
R0MgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgCi0g
ICAgaWYgKGNvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24pIHsKLSAgICAgICAgY29k
ZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFu
Ojpjb21waWxlT25NYWluVGhyZWFkTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgIHJldHVybjsKKyAgICByZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0odm0s
IFsmXShKSVRQbGFuJiBwbGFuKSB7CisgICAgICAgIHJldHVybiBwbGFuLnN0YWdlKCkgIT0gSklU
UGxhblN0YWdlOjpDb21waWxpbmc7CisgICAgfSk7CisKKyAgICB3YWl0VW50aWxBbGxQbGFuc0Zv
clZNQXJlUmVhZHkodm0pOworCisgICAgVmVjdG9yPFJlZlB0cjxKSVRQbGFuPiwgOD4gbXlSZWFk
eVBsYW5zOworICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFkeVBsYW5zKTsK
K30KKwordm9pZCBKSVRXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKK3sKKyAgICBy
ZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0odm0sIFsmXShKSVRQbGFuJiBwbGFuKSB7CisgICAgICAg
IGlmICghcGxhbi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcGxhbi5maW5hbGl6ZUluR0MoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0pOworCisgICAgLy8gTm8gbG9ja2luZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2Vl
IGNvbW1lbnQgaW4gdmlzaXRXZWFrUmVmZXJlbmNlcygpLgorICAgIGZvciAodW5zaWduZWQgaSA9
IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQg
PSBtX3RocmVhZHNbaV0uZ2V0KCktPm1fc2FmZXBvaW50OworICAgICAgICBpZiAoIXNhZmVwb2lu
dCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9
ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tu
b3duVG9CZUxpdmVBZnRlckdDKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2Fm
ZXBvaW50LT5jYW5jZWwoKTsKICAgICB9Ci0gICAgCi0gICAgY29kZUJsb2NrLT5qaXRTb29uKCk7
Cit9CiAKK3Vuc2lnbmVkIEpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50
REZHQ29tcGlsYXRpb25zKHVuc2lnbmVkIG4pCit7CisgICAgdW5zaWduZWQgb2xkVmFsdWUgPSBt
X21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0
PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpERkcpXTsKKyAgICBtX21heGltdW1OdW1iZXJPZkNv
bmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFu
OjpUaWVyOjpERkcpXSA9IG47CisgICAgcmV0dXJuIG9sZFZhbHVlOworfQorCit1bnNpZ25lZCBK
SVRXb3JrbGlzdDo6c2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudEZUTENvbXBpbGF0aW9ucyh1
bnNpZ25lZCBuKQoreworICAgIHVuc2lnbmVkIG9sZFZhbHVlID0gbV9tYXhpbXVtTnVtYmVyT2ZD
b25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxh
bjo6VGllcjo6RlRMKV07CisgICAgbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRp
b25zUGVyVGllcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxhbjo6VGllcjo6RlRMKV0gPSBu
OworICAgIHJldHVybiBvbGRWYWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
K3ZvaWQgSklUV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewogICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fcGxhbm5l
ZC5jb250YWlucyhjb2RlQmxvY2spKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewotICAgICAgICAgICAgbV9wbGFubmVk
LmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgIG1fcGxhbnMuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQo
cGxhbik7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnkudmFsdWUtPnZtKCkgIT0gdm0pCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBlbnRyeS52YWx1ZS0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBDb21waWxpbmcg
b24gdGhlIG1haW4gdGhyZWFkIGlmIHRoZSBoZWxwZXIgdGhyZWFkIGlzbid0IGF2YWlsYWJsZSBp
cyBhIGRlZmVuc2UgYWdhaW5zdCB0aGlzCi0gICAgLy8gcGF0aG9sb2d5OgotICAgIC8vCi0gICAg
Ly8gMSkgRG8gc29tZXRoaW5nIHRoYXQgaXMgYWxsb3dlZCB0byB0YWtlIGEgd2hpbGUsIGxpa2Ug
bG9hZCBhIGdpYW50IHBpZWNlIG9mIGluaXRpYWxpemF0aW9uCi0gICAgLy8gICAgY29kZS4gVGhp
cyBwbGFucyB0aGUgY29tcGlsZSBvZiB0aGUgaW5pdCBjb2RlLCBidXQgZG9lc24ndCBmaW5pc2gg
aXQuIEl0IHdpbGwgdGFrZSBhCi0gICAgLy8gICAgd2hpbGUuCi0gICAgLy8KLSAgICAvLyAyKSBE
byBzb21ldGhpbmcgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBxdWljay4gTm93IGFsbCBiYXNlbGlu
ZSBjb21waWxlcywgYW5kIHNvIGFsbCBERkcgYW5kCi0gICAgLy8gICAgRlRMIGNvbXBpbGVzLCBv
ZiBldmVyeXRoaW5nIGlzIGJsb2NrZWQgb24gdGhlIGxvbmctcnVubmluZyBiYXNlbGluZSBjb21w
aWxlIG9mIHRoYXQKLSAgICAvLyAgICBpbml0aWFsaXphdGlvbiBjb2RlLgotICAgIC8vCi0gICAg
Ly8gVGhlIHNpbmdsZS10aHJlYWRlZCBjb25jdXJyZW50IEpJVCBoYXMgdGhpcyB0ZW5kZW5jeSB0
byBjb252b3kgZXZlcnl0aGluZyB3aGlsZSBhdCB0aGUgc2FtZQotICAgIC8vIHRpbWUgcG9zdHBv
bmluZyB3aGVuIGl0IGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbnZveSBkZWxheXMg
YXJlIGxlc3MgcHJlZGljdGFibGUuCi0gICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3Vl
LiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8g
bWFpbgotICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29v
ZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCi0gICAgLy8gY2Fu
IGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlT25NYWluVGhyZWFkTm93KGNvZGVC
bG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgLy8gVGhpcyBsb29wIGRvZXNu
J3QgbmVlZCBsb2NraW5nIGJlY2F1c2U6CisgICAgLy8gKDEpIG5vIG5ldyB0aHJlYWRzIGNhbiBi
ZSBhZGRlZCB0byBtX3RocmVhZHMuIEhlbmNlLCBpdCBpcyBpbW11dGFibGUgYW5kIG5lZWRzIG5v
IGxvY2tzLgorICAgIC8vICgyKSBKSVRXb3JrbGlzdFRocmVhZDo6bV9zYWZlcG9pbnQgaXMgcHJv
dGVjdGVkIGJ5IHRoYXQgdGhyZWFkJ3MgbV9yaWdodFRvUnVuIHdoaWNoIHdlIG11c3QgYmUKKyAg
ICAvLyAgICAgaG9sZGluZyBoZXJlIGJlY2F1c2Ugb2YgYSBwcmlvciBjYWxsIHRvIHN1c3BlbmRB
bGxUaHJlYWRzKCkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0t
OykgeworICAgICAgICBTYWZlcG9pbnQqIHNhZmVwb2ludCA9IG1fdGhyZWFkc1tpXS0+bV9zYWZl
cG9pbnQ7CisgICAgICAgIGlmIChzYWZlcG9pbnQgJiYgc2FmZXBvaW50LT52bSgpID09IHZtKQor
ICAgICAgICAgICAgc2FmZXBvaW50LT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKKyAgICB9CiB9Cit0ZW1wbGF0ZSB2b2lkIEpJVFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSklUV29ya2xpc3Q6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIAotdm9pZCBKSVRXb3JrbGlzdDo6
ZmluYWxpemVQbGFucyhQbGFucyYgbXlQbGFucykKK3ZvaWQgSklUV29ya2xpc3Q6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKFJlZlB0cjxQbGFuPiYgcGxhbiA6IG15
UGxhbnMpIHsKLSAgICAgICAgcGxhbi0+ZmluYWxpemUodHJ1ZSk7Ci0gICAgICAgIAotICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBs
YW4tPmNvZGVCbG9jaygpKTsKLSAgICB9CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsK
KyAgICBkdW1wKGxvY2tlciwgb3V0KTsKIH0KIAotc3RhdGljIEpJVFdvcmtsaXN0KiB0aGVHbG9i
YWxKSVRXb3JrbGlzdCB7IG51bGxwdHIgfTsKK3ZvaWQgSklUV29ya2xpc3Q6OmR1bXAoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGxvY2tlciwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoCisgICAgICAgICJKSVRXb3JrbGlzdCgiLCBSYXdQb2ludGVyKHRoaXMpLCAiKVtR
dWV1ZSBMZW5ndGggPSAiLCBxdWV1ZUxlbmd0aChsb2NrZXIpLAorICAgICAgICAiLCBNYXAgU2l6
ZSA9ICIsIG1fcGxhbnMuc2l6ZSgpLCAiLCBOdW0gUmVhZHkgPSAiLCBtX3JlYWR5UGxhbnMuc2l6
ZSgpLAorICAgICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9mQWN0aXZl
VGhyZWFkcywgIi8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOworfQogCi1KSVRXb3JrbGlzdCog
SklUV29ya2xpc3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKQordm9pZCBKSVRXb3Jr
bGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgVmVjdG9yPFJlZlB0cjxKSVRQ
bGFuPiwgOD4mIG15UmVhZHlQbGFucykKIHsKLSAgICByZXR1cm4gdGhlR2xvYmFsSklUV29ya2xp
c3Q7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIExvY2tlciBsb2NrZXIgeyAq
bV9sb2NrIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEpJVFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07
CisgICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OlJlYWR5KQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxhbik7CisgICAg
ICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKKyAgICAgICAgbV9y
ZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9wbGFucy5yZW1vdmUocGxhbi0+a2V5
KCkpOworICAgIH0KIH0KIAotSklUV29ya2xpc3QmIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxX
b3JrbGlzdCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgordm9pZCBKSVRXb3Jr
bGlzdDo6cmVtb3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKFZNJiB2bSwgY29uc3QgTWF0Y2hGdW5jdGlv
biYgbWF0Y2hlcykKIHsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKLSAgICBzdGQ6
OmNhbGxfb25jZSgKLSAgICAgICAgb25jZSwKLSAgICAgICAgW10gewotICAgICAgICAgICAgYXV0
byogd29ya2xpc3QgPSBuZXcgSklUV29ya2xpc3QoKTsKLSAgICAgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICB0aGVHbG9iYWxKSVRXb3JrbGlzdCA9IHdvcmtsaXN0
OwotICAgICAgICB9KTsKLSAgICByZXR1cm4gKnRoZUdsb2JhbEpJVFdvcmtsaXN0OworICAgIExv
Y2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgSGFzaFNldDxKSVRDb21waWxhdGlvbktleT4g
ZGVhZFBsYW5LZXlzOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CisgICAgICAg
IEpJVFBsYW4qIHBsYW4gPSBlbnRyeS52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZt
KCkgIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghbWF0Y2hlcygq
cGxhbikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxh
bi0+c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKTsKKyAgICAgICAgZGVhZFBsYW5L
ZXlzLmFkZChwbGFuLT5rZXkoKSk7CisgICAgfQorICAgIGZvciAoSklUQ29tcGlsYXRpb25LZXkg
a2V5IDogZGVhZFBsYW5LZXlzKQorICAgICAgICBtX3BsYW5zLnRha2Uoa2V5KS0+Y2FuY2VsKCk7
CisgICAgZm9yIChhdXRvJiBxdWV1ZSA6IG1fcXVldWVzKSB7CisgICAgICAgIERlcXVlPFJlZlB0
cjxKSVRQbGFuPj4gbmV3UXVldWU7CisgICAgICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBSZWZQdHI8SklUUGxhbj4gcGxhbiA9IHF1ZXVlLnRha2VGaXJzdCgpOwor
ICAgICAgICAgICAgaWYgKHBsYW4tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkK
KyAgICAgICAgICAgICAgICBuZXdRdWV1ZS5hcHBlbmQocGxhbik7CisgICAgICAgIH0KKyAgICAg
ICAgcXVldWUuc3dhcChuZXdRdWV1ZSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcmVhZHlQbGFu
c1tpXS0+c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsK
KyAgICAgICAgbV9yZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCmluZGV4IGE3
MmE4Mzg3MGEwMDgyZmNkMzQ0OTUyOTBlYTUwZWExNDBkODlmMmYuLjljNmE5MDM4YzlkMDkzMDI2
OGJiMTk4NzViNzJkM2QzNDAzMzczYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUV29ya2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdv
cmtsaXN0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjAsMTcgKzIwLDE3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNwcmFnbWEg
b25jZQogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKLSNp
bmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSAiSklUUGxhbi5oIgorI2lu
Y2x1ZGUgIkpJVFdvcmtsaXN0VGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNDUsMzcgKzQ1LDg0IEBAIGNsYXNzIEpJVFdvcmtsaXN0IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRXb3JrbGlzdCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAKLSAgICBjbGFzcyBQbGFuOwotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQ
bGFuPiwgMzI+IFBsYW5zOwotICAgIAorICAgIGZyaWVuZCBjbGFzcyBKSVRXb3JrbGlzdFRocmVh
ZDsKKwogcHVibGljOgogICAgIH5KSVRXb3JrbGlzdCgpOwotICAgIAotICAgIGJvb2wgY29tcGxl
dGVBbGxGb3JWTShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnkgSklUIHdvcmsgaGFwcGVuZWQu
Ci0gICAgdm9pZCBwb2xsKFZNJik7Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7Ci0gICAgCisKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdv
cmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0
T3JOdWxsKCk7Ci0gICAgCisKKyAgICBDb21waWxhdGlvblJlc3VsdCBlbnF1ZXVlKFJlZjxKSVRQ
bGFuPik7CisgICAgc2l6ZV90IHF1ZXVlTGVuZ3RoKCkgY29uc3Q7CisKKyAgICB2b2lkIHN1c3Bl
bmRBbGxUaHJlYWRzKCk7CisgICAgdm9pZCByZXN1bWVBbGxUaHJlYWRzKCk7CisKKyAgICBlbnVt
IFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKKyAgICBTdGF0ZSBjb21w
aWxhdGlvblN0YXRlKEpJVENvbXBpbGF0aW9uS2V5KTsKKworICAgIFN0YXRlIGNvbXBsZXRlQWxs
UmVhZHlQbGFuc0ZvclZNKFZNJiwgSklUQ29tcGlsYXRpb25LZXkgPSBKSVRDb21waWxhdGlvbktl
eSgpKTsKKworICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CisK
KyAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CisgICAgLy8gd29ya2xpc3QtPndhaXRVbnRp
bEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxs
UmVhZHlQbGFuc0ZvclZNKHZtKTsKKyAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYp
OworCisgICAgdm9pZCBjYW5jZWxBbGxQbGFuc0ZvclZNKFZNJik7CisKKyAgICB2b2lkIHJlbW92
ZURlYWRQbGFucyhWTSYpOworCisgICAgdW5zaWduZWQgc2V0TWF4aW11bU51bWJlck9mQ29uY3Vy
cmVudERGR0NvbXBpbGF0aW9ucyh1bnNpZ25lZCk7CisgICAgdW5zaWduZWQgc2V0TWF4aW11bU51
bWJlck9mQ29uY3VycmVudEZUTENvbXBpbGF0aW9ucyh1bnNpZ25lZCk7CisKKyAgICAvLyBPbmx5
IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJl
bmNlcyhWaXNpdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jdGlvbjx2
b2lkKENvZGVCbG9jayopPiYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgSklUV29ya2xpc3QoKTsKLSAgICAKLSAgICBjbGFzcyBUaHJlYWQ7
Ci0gICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKLSAgICAKLSAgICB2b2lkIGZpbmFsaXplUGxhbnMo
UGxhbnMmKTsKLSAgICAKLSAgICBQbGFucyBtX3F1ZXVlOwotICAgIFBsYW5zIG1fcGxhbnM7Ci0g
ICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX3BsYW5uZWQ7Ci0gICAgCisKKyAgICBzaXplX3QgcXVl
dWVMZW5ndGgoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1hdGNoRnVuY3Rpb24+CisgICAgdm9pZCByZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0o
Vk0mLCBjb25zdCBNYXRjaEZ1bmN0aW9uJik7CisKKyAgICB2b2lkIHJlbW92ZUFsbFJlYWR5UGxh
bnNGb3JWTShWTSYsIFZlY3RvcjxSZWZQdHI8SklUUGxhbj4sIDg+Jik7CisKKyAgICB2b2lkIGR1
bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5z
aWduZWQgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAgc3RkOjphcnJheTx1bnNp
Z25lZCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fb25nb2lu
Z0NvbXBpbGF0aW9uc1BlclRpZXIgeyAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTx1bnNpZ25l
ZCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fbWF4aW11bU51
bWJlck9mQ29uY3VycmVudENvbXBpbGF0aW9uc1BlclRpZXI7CisKKyAgICBWZWN0b3I8UmVmUHRy
PEpJVFdvcmtsaXN0VGhyZWFkPj4gbV90aHJlYWRzOworCisgICAgLy8gVXNlZCB0byBpbmZvcm0g
dGhlIHRocmVhZCBhYm91dCB3aGF0IHdvcmsgdGhlcmUgaXMgbGVmdCB0byBkby4KKyAgICBzdGQ6
OmFycmF5PERlcXVlPFJlZlB0cjxKSVRQbGFuPj4sIHN0YXRpY19jYXN0PHNpemVfdD4oSklUUGxh
bjo6VGllcjo6Q291bnQpPiBtX3F1ZXVlczsKKworICAgIC8vIFVzZWQgdG8gYW5zd2VyIHF1ZXN0
aW9ucyBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvZGUgYmxvY2suIFRoaXMKKyAgICAv
LyBpcyBwYXJ0aWN1bGFybHkgZ3JlYXQgZm9yIHRoZSBjdGlfb3B0aW1pemUgT1NSIHNsb3cgcGF0
aCwgd2hpY2ggd2FudHMKKyAgICAvLyB0byBrbm93OiBkaWQgSSBnZXQgaGVyZSBiZWNhdXNlIGEg
YmV0dGVyIHZlcnNpb24gb2YgbWUganVzdCBnb3QKKyAgICAvLyBjb21waWxlZD8KKyAgICBIYXNo
TWFwPEpJVENvbXBpbGF0aW9uS2V5LCBSZWZQdHI8SklUUGxhbj4+IG1fcGxhbnM7CisKKyAgICAv
LyBVc2VkIHRvIHF1aWNrbHkgZmluZCB3aGljaCBwbGFucyBoYXZlIGJlZW4gY29tcGlsZWQgYW5k
IGFyZSByZWFkeSB0bworICAgIC8vIGJlIGNvbXBsZXRlZC4KKyAgICBWZWN0b3I8UmVmUHRyPEpJ
VFBsYW4+LCAxNj4gbV9yZWFkeVBsYW5zOworCisgICAgVW5jaGVja2VkTG9jayBtX3N1c3BlbnNp
b25Mb2NrOwogICAgIEJveDxVbmNoZWNrZWRMb2NrPiBtX2xvY2s7Ci0gICAgUmVmPEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbj4gbV9jb25kaXRpb247IC8vIFdlIHVzZSBPbmUgVHJ1ZSBDb25kaXRp
b24gZm9yIGV2ZXJ5dGhpbmcgYmVjYXVzZSB0aGF0J3MgZWFzaWVyLgotICAgIFJlZlB0cjxBdXRv
bWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwotICAgIAotICAgIHVuc2lnbmVkIG1fbnVtQXZhaWxhYmxl
VGhyZWFkcyB7IDAgfTsKKworICAgIFJlZjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fcGxh
bkVucXVldWVkOworICAgIFVuY2hlY2tlZENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRXb3JrbGlzdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29y
a2xpc3RJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcyOGQ2MWIzMThmNzk0MGRjMmMzZjJiOGZmNzZi
ZmZkMmFkZmQ5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3RJbmxpbmVzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSklUV29ya2xpc3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBFTkFCTEUoSklUKQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKSVRXb3JrbGlzdDo6aXRlcmF0ZUNv
ZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoQ29kZUJsb2NrKik+JiBmdW5jKQoreworICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcGxhbnMpIHsKKyAgICAgICAgaWYgKGVudHJ5LnZh
bHVlLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBlbnRyeS52
YWx1ZS0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKKyAgICB9Cit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdj
ODA3Nzg1MGYzODFlODNiNjE5ZWI5ZTg2ZjYwYzJkMTdjNDFhYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwCkBAIC0wLDAg
KzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0VGhyZWFkLmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKKyNpbmNsdWRlICJWTS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUV29ya2xpc3RUaHJlYWQ6OldvcmtTY29w
ZSBmaW5hbCB7CitwdWJsaWM6CisgICAgV29ya1Njb3BlKEpJVFdvcmtsaXN0VGhyZWFkJiB0aHJl
YWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1fdGllcih0aHJlYWQu
bV9wbGFuLT50aWVyKCkpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5t
X3BsYW4pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5tX3dvcmtsaXN0Lm1fbnVt
YmVyT2ZBY3RpdmVUaHJlYWRzKTsKKyAgICB9CisKKyAgICB+V29ya1Njb3BlKCkKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV90aHJlYWQubV93b3JrbGlzdC5tX2xvY2sgfTsKKyAg
ICAgICAgbV90aHJlYWQubV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgbV90aHJlYWQubV93b3Jr
bGlzdC5tX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOworICAgICAgICBtX3RocmVhZC5tX3dvcmts
aXN0Lm1fb25nb2luZ0NvbXBpbGF0aW9uc1BlclRpZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dGllcildLS07CisgICAgfQorCitwcml2YXRlOgorICAgIEpJVFdvcmtsaXN0VGhyZWFkJiBtX3Ro
cmVhZDsKKyAgICBKSVRQbGFuOjpUaWVyIG1fdGllcjsKK307CisKK0pJVFdvcmtsaXN0VGhyZWFk
OjpKSVRXb3JrbGlzdFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKSVRXb3Jr
bGlzdCYgd29ya2xpc3QpCisgICAgOiBBdXRvbWF0aWNUaHJlYWQobG9ja2VyLCB3b3JrbGlzdC5t
X2xvY2ssIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLmNvcHlSZWYoKSwgVGhyZWFkVHlwZTo6Q29t
cGlsZXIpCisgICAgLCBtX3dvcmtsaXN0KHdvcmtsaXN0KQoreworfQorY29uc3QgY2hhciogSklU
V29ya2xpc3RUaHJlYWQ6Om5hbWUoKSBjb25zdAoreworI2lmIE9TKExJTlVYKQorICAgIHJldHVy
biAiSklUV29ya2VyIjsKKyNlbHNlCisgICAgcmV0dXJuICJKSVQgV29ya2xpc3QgSGVscGVyIFRo
cmVhZCI7CisjZW5kaWYKK30KKworYXV0byBKSVRXb3JrbGlzdFRocmVhZDo6cG9sbChjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyKSAtPiBQb2xsUmVzdWx0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpDb3VudCk7
ICsraSkgeworICAgICAgICBhdXRvJiBxdWV1ZSA9IG1fd29ya2xpc3QubV9xdWV1ZXNbaV07Cisg
ICAgICAgIGlmIChxdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworCisg
ICAgICAgIGlmIChtX3dvcmtsaXN0Lm1fb25nb2luZ0NvbXBpbGF0aW9uc1BlclRpZXJbaV0gPj0g
bV93b3JrbGlzdC5tX21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVy
W2ldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9wbGFuID0gcXVldWUudGFr
ZUZpcnN0KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9wbGFuKSkgeworICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtsaXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIjogVGhyZWFkIHNodXR0aW5nIGRvd25cbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisgICAgICAgIH0KKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3BsYW4tPnN0YWdlKCkgPT0gSklUUGxhblN0YWdlOjpQcmVwYXJp
bmcpOworICAgICAgICBtX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7CisgICAg
ICAgIG1fd29ya2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllcltpXSsrOworICAgICAg
ICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKyAgICB9CisKKyAgICByZXR1cm4gUG9sbFJlc3Vs
dDo6V2FpdDsKK30KKworYXV0byBKSVRXb3JrbGlzdFRocmVhZDo6d29yaygpIC0+IFdvcmtSZXN1
bHQKK3sKKyAgICBXb3JrU2NvcGUgd29ya1Njb3BlKCp0aGlzKTsKKworICAgIExvY2tlciBsb2Nr
ZXIgeyBtX3JpZ2h0VG9SdW4gfTsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV93
b3JrbGlzdC5tX2xvY2sgfTsKKyAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFu
U3RhZ2U6OkNhbmNlbGVkKQorICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVl
OworICAgICAgICBtX3BsYW4tPm5vdGlmeUNvbXBpbGluZygpOworICAgIH0KKworCisgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwg
IjogQ29tcGlsaW5nICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHkiKTsKKworICAg
IC8vIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdl
IG93biByaWdodFRvUnVuLgorICAgIGlmIChtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3Bw
ZWQoKSkgeworICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJl
ISAoMSlcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCh0aGlzKTsKKyAgICBpZiAobV9wbGFuLT5zdGFn
ZSgpICE9IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpIHsKKyAgICAgICAgaWYgKG1fcGxhbi0+dm0o
KS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlz
IHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAg
TG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OworICAgICAgICBpZiAobV9wbGFu
LT5zdGFnZSgpID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICByZXR1cm4g
V29ya1Jlc3VsdDo6Q29udGludWU7CisKKyAgICAgICAgbV9wbGFuLT5ub3RpZnlSZWFkeSgpOwor
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7CisgICAg
ICAgICAgICBtX3dvcmtsaXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAg
ICAgICAgZGF0YUxvZygiOiBDb21waWxlZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91
c2x5XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZt
KCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBs
YW5zLmFwcGVuZChXVEZNb3ZlKG1fcGxhbikpOworICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNv
bXBpbGVkLm5vdGlmeUFsbCgpOworICAgIH0KKworICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250
aW51ZTsKK30KKwordm9pZCBKSVRXb3JrbGlzdFRocmVhZDo6dGhyZWFkRGlkU3RhcnQoKQorewor
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksIG1fd29y
a2xpc3QsICI6IFRocmVhZCBzdGFydGVkIik7CisKK30KKwordm9pZCBKSVRXb3JrbGlzdFRocmVh
ZDo6dGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjog
VGhyZWFkIHdpbGwgc3RvcCIpOworICAgIEFTU0VSVCghbV9wbGFuKTsKKyAgICBtX3BsYW4gPSBu
dWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFk
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFkLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDY1ZTQ3MTAyNzk0NmVmODFmNmI2MGE3MDBiZWZhZDAzM2QxYmM5YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUUGxh
bi5oIgorI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpJVFdvcmtsaXN0OworY2xhc3MgU2FmZXBvaW50OworCitjbGFzcyBKSVRXb3Jr
bGlzdFRocmVhZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgeworICAgIGNsYXNzIFdv
cmtTY29wZTsKKworICAgIGZyaWVuZCBjbGFzcyBTYWZlcG9pbnQ7CisgICAgZnJpZW5kIGNsYXNz
IFdvcmtTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgSklUV29ya2xpc3Q7CisKK3B1YmxpYzoKKyAg
ICBKSVRXb3JrbGlzdFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpJVFdvcmtsaXN0Jik7
CisKKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAg
UG9sbFJlc3VsdCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgZmluYWw7CisgICAgV29ya1Jl
c3VsdCB3b3JrKCkgZmluYWw7CisKKyAgICB2b2lkIHRocmVhZERpZFN0YXJ0KCkgZmluYWw7CisK
KyAgICB2b2lkIHRocmVhZElzU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbDsK
KworICAgIFVuY2hlY2tlZExvY2sgbV9yaWdodFRvUnVuOworICAgIEpJVFdvcmtsaXN0JiBtX3dv
cmtsaXN0OworICAgIFJlZlB0cjxKSVRQbGFuPiBtX3BsYW4geyBudWxscHRyIH07CisgICAgU2Fm
ZXBvaW50KiBtX3NhZmVwb2ludCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IGY3ZjNkZDE5YjM0ZWU0Yjc2MWVmMDNmN2NiMzdl
YTdmNmQzMDEzODIuLmU0NDA1NTc0NjJlMDQ2YTJiNTA4NzBjNWYzZTk1NmYyMmQzM2RkYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkxMSW50U2xvd1BhdGhzLmgiCiAKICNpbmNsdWRlICJB
cnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRQbGFuLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzc1LDIzICszNzYsMjEgQEAg
aW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBl
OjpCYXNlbGluZUpJVDogeworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0g
SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2Rl
OjpCYXNlbGluZSkpOworCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUIHx8IHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7
CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdh
cyBhbHJlYWR5IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuazogewotICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21w
aWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKworICAgIGlm
ICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpOb3RLbm93bikgeworICAgICAgICBSZWY8
QmFzZWxpbmVKSVRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVFBsYW4oY29k
ZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgICAgIEpJVFdvcmtsaXN0
OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiAgICAgICAg
IHJldHVybiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKICAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2Nr
IGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKIH0KIAogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA3MDc3YWUyOGVlMzY2
YjA4ODFjZDk5ZTM5NTdiMzM3OTMxZWIyYmEyLi5kOTQ5N2ViZDRmMGJhNmY2MjU3OWRjZDU0MjNh
N2I5ODQ3ZTk0NGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKQEAgLTI0Nyw2ICsyNDcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJ
VENhZ2UoKTsKICAgICB2KFVuc2lnbmVkLCBtYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNp
c2VBbmFseXNpcywgMjAwMDAsIE5vcm1hbCwgIkRpc2FibGUgcHJlY2lzZSBidXQgY29zdGx5IGFu
YWx5c2lzIGFuZCBnaXZlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGlmIHRoZSBudW1iZXIgb2YgREZH
IG5vZGVzIGluIGEgYmxvY2sgZXhjZWVkcyB0aGlzIHRocmVzaG9sZCIpIFwKICAgICBcCiAgICAg
dihCb29sLCB1c2VDb25jdXJyZW50SklULCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIERGRyAv
IEZUTCBjb21waWxhdGlvbiBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIGV4ZWN1dGluZyBKUyB0
aHJlYWQiKSBcCisgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZXb3JrbGlzdFRocmVhZHMsIGNvbXB1
dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMywgMiksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
VW5zaWduZWQsIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3Jr
ZXJUaHJlYWRzKDMsIDIpIC0gMSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwg
bnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMo
TUFYSU1VTV9OVU1CRVJfT0ZfRlRMX0NPTVBJTEVSX1RIUkVBRFMsIDIpIC0gMSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihJbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJUaHJlYWRz
LCBjb21wdXRlUHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwgbnVs
bHB0cikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDg2MDgyYjJiZTdj
YmE0YjUyNmFhOTdhOWQzOTRiNTlkNjg0MWU4NDkuLjYwZjk4ZjU2M2E3NmVkZWRhNTJhMDcyODgz
ZTRiYWZlYmQ3MmRlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTQz
LDcgKzQzLDYgQEAKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNv
bnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKLSNp
bmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRPTUF0dHJpYnV0ZUdldHRlclNldHRl
ci5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUu
aCIKQEAgLTYxMywyMCArNjEyLDggQEAgVk06On5WTSgpCiAgICAgCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBpZiAoSklUV29ya2xpc3QqIHdvcmtsaXN0ID0gSklUV29ya2xpc3Q6OmV4aXN0aW5nR2xv
YmFsV29ya2xpc3RPck51bGwoKSkKLSAgICAgICAgd29ya2xpc3QtPmNvbXBsZXRlQWxsRm9yVk0o
KnRoaXMpOworICAgICAgICB3b3JrbGlzdC0+Y2FuY2VsQWxsUGxhbnNGb3JWTSgqdGhpcyk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIE1ha2Ug
c3VyZSBjb25jdXJyZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZSwgYnV0IGRvbid0IGluc3RhbGwg
dGhlbSwgc2luY2UgdGhlcmUgaXMKLSAgICAvLyBubyBwb2ludCB0byBkb2luZyBzby4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXhPck51bGwoaSkpIHsKLSAgICAgICAgICAgIHdvcmtsaXN0LT5yZW1vdmVOb25Db21waWxp
bmdQbGFuc0ZvclZNKCp0aGlzKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LT53YWl0VW50aWxBbGxQ
bGFuc0ZvclZNQXJlUmVhZHkoKnRoaXMpOwotICAgICAgICAgICAgd29ya2xpc3QtPnJlbW92ZUFs
bFJlYWR5UGxhbnNGb3JWTSgqdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCiAgICAgCiAgICAgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCk7
CiAgICAgCg==
</data>
<flag name="commit-queue"
          id="450952"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429713</attachid>
            <date>2021-05-25 17:16:03 -0700</date>
            <delta_ts>2021-05-25 17:50:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226207-20210525171602.patch</filename>
            <type>text/plain</type>
            <size>251676</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YTA5MTQ4MzJmODk5NGY2M2E5MjAwZjQ0NjYwYThjMmQwZWM0ZWE2Li5kMmIyOTc3ZDBmZjhhODg3
NDI4ZmRkNmIwOGQ4ODkxMGE5NGIzZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMDUtMjQgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgTWVyZ2UgYWxsIHRoZSBKSVQgd29ya2xpc3RzIGludG8gYSBzaGFyZWQg
d29ya2xpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjIwNworCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIERl
bGV0ZSB0aGUgREZHIGFuZCBGVEwgd29ya2xpc3RzIGFuZCByZWZhY3RvciBKSVRXb3JrbGlzdCB0
byBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgIGZvciBhbGwgdGllcnMuIFRoaXMgcmVk
dWNlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbXBpbGVyIHRocmVhZHMgd2hpbGUgYWxsb3dpbmcg
ZWFjaAorICAgICAgICB0aWVyIHRvIHVzZSBtb3JlIHRocmVhZHMgd2hlbmV2ZXIgbmVjZXNzYXJ5
LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGZvciB0aGUKKyAgICAgICAgd29ya2xpc3Qg
dG8gaGF2ZSAzIHRocmVhZHMsIGJhc2VsaW5lIGNhbiB1c2UgdXAgdG8gYWxsIDMgdGhyZWFkcyBh
bmQgREZHIGFuZCBGVEwgZm9sbG93CisgICAgICAgIHRoZSBwcmV2aW91cyBsaW1pdHMgc2V0IHRo
cm91Z2ggSlNDOjpPcHRpb25zLiBSaWdodCBub3csIHRoZSB3b3JrbGlzdCB3aWxsIG9ubHkgZG8g
d29yaworICAgICAgICBvbiB1cHBlciB0aWVycyB3aGVuIGFsbCBsb3dlciB0aWVycyBoYXZlIG5v
IHBlbmRpbmcgdGFza3Mgb3IgaGF2ZSBleGNlZWRlZCB0aGUgbWF4aW11bQorICAgICAgICBudW1i
ZXIgb2YgY29uY3VycmVudCBjb21waWxhdGlvbnMuIGkuZS4gYnkgZGVmYXVsdCB3ZSBvbmx5IERG
RyBjb21waWxlIHdoZW4gdGhlcmUgYXJlCisgICAgICAgIG5vIGJhc2VsaW5lIHRhc2tzIGluIHRo
ZSBxdWV1ZSBhbmQgd2Ugb25seSBGVEwgY29tcGlsZSB3aGVuIHdlIGVpdGhlciBoYXZlIG5vIERG
RyB0YXNrcworICAgICAgICBpbiB0aGUgcXVldWUgT1IgdGhlcmUgYXJlIGFscmVhZHkgMiBERkcg
Y29tcGlsYXRpb25zIGluIHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hp
bmUubW06CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZERkdDb21waWxl
clRocmVhZHM6XSk6CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZGVExD
b21waWxlclRocmVhZHM6XSk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAg
ICAgIChydW5KSVRUaHJlYWRMaW1pdFRlc3RzKToKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpsb2dDb21waWxhdGlvbkNoYW5nZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OnNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoU2FmZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6dGllclVwQ29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplSW5HQyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5UmVhZHkpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFk
SW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbklubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRM
Q29tcGlsZS5oOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAqIGZ0bC9GVExT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBm
dGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbXBsZXRlQWxsSklUUGxh
bnMpOgorICAgICAgICAoSlNDOjpIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0
RW50cmllcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVQZXJpcGhlcnkpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL1Jvb3RN
YXJrUmVhc29uLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUaW1lU3RhdHMpOgorICAg
ICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQmFzZWxpbmVQbGFuLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAuCisgICAgICAg
IChKU0M6OkpJVEJhc2VsaW5lUGxhbjo6SklUQmFzZWxpbmVQbGFuKToKKyAgICAgICAgKEpTQzo6
SklUQmFzZWxpbmVQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklU
QmFzZWxpbmVQbGFuOjpjb2RlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVEJhc2VsaW5l
UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRCYXNlbGluZVBsYW4uaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaC4KKyAgICAgICAg
KiBqaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5jcHAuCisgICAgICAgIChKU0M6OkpJVENvbXBp
bGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklUQ29tcGlsYXRpb25LZXku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25L
ZXkuaC4KKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENvbXBpbGF0aW9uS2V5
KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yISBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojptb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJ
VENvbXBpbGF0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9u
S2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbk1vZGUu
Y3BwLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklUQ29t
cGlsYXRpb25Nb2RlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbXBpbGF0aW9uTW9kZS5oLgorICAgICAgICAoSlNDOjppc0ZUTCk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04pOgorICAgICAgICAqIGppdC9KSVRQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpJ
VFBsYW46OkpJVFBsYW4pOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjYW5jZWwpOgorICAgICAg
ICAoSlNDOjpKSVRQbGFuOjpub3RpZnlDb21waWxpbmcpOgorICAgICAgICAoSlNDOjpKSVRQbGFu
Ojpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRpZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRQbGFuOjprZXkpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppc0tub3du
VG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUUGxhbjo6cmVwb3J0Q29tcGlsZVRpbWVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SklUUGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKiBqaXQvSklUUGxhbi5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUUGxhbjo6fkpJVFBsYW4pOgorICAgICAgICAoSlND
OjpKSVRQbGFuOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmNvZGVCbG9jayBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRocmVhZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkpJVFBsYW46Om1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpzdGFnZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmlzRlRMIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SklUUGxhbjo6ZmluYWxpemVJbkdDKToKKyAgICAgICAgKiBqaXQvSklUUGxhblN0YWdlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3Bw
LgorICAgICAgICAqIGppdC9KSVRTYWZlcG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwLgorICAgICAgICAoSlNDOjpTYWZlcG9p
bnQ6OlNhZmVwb2ludCk6CisgICAgICAgIChKU0M6OlNhZmVwb2ludDo6flNhZmVwb2ludCk6Cisg
ICAgICAgIChKU0M6OlNhZmVwb2ludDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTYWZlcG9pbnQ6
OmNhbmNlbCk6CisgICAgICAgICogaml0L0pJVFNhZmVwb2ludC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaC4KKyAgICAgICAgKiBqaXQvSklU
U2Nhbm5hYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nh
bm5hYmxlLmguCisgICAgICAgICogaml0L0pJVFdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6On5K
SVRXb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdv
cmtsaXN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdv
cmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6cXVldWVMZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRX
b3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxhdGlv
blN0YXRlKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9y
Vk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0pOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y2FuY2VsQWxsUGxhbnNGb3JWTSk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6c2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudERGR0NvbXBpbGF0
aW9ucyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25j
dXJyZW50RlRMQ29tcGlsYXRpb25zKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6cmVtb3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKToKKyAg
ICAgICAgKiBqaXQvSklUV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnN0
YXRpY19jYXN0PHNpemVfdD4pOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdElubGluZXMuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmguCisg
ICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToKKyAgICAg
ICAgKiBqaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklU
V29ya2xpc3RUaHJlYWQ6OkpJVFdvcmtsaXN0VGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUV29y
a2xpc3RUaHJlYWQ6Om5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdFRocmVh
ZDo6cG9sbCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0VGhyZWFkOjp3b3JrKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZERpZFN0YXJ0KToKKyAgICAgICAgKEpT
Qzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZElzU3RvcHBpbmcpOgorICAgICAgICAqIGppdC9K
SVRXb3JrbGlzdFRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHJlYWREYXRhLmguCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06On5WTSk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpv
cHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
CmluZGV4IDBlMjQ4OWMyMzcxM2FmMTNkMzFhMzY0ZDgwYjAwNWQ1YzVlNjZiMWYuLmFkNmU1MDBm
ZjFiZWNkNjEwYzQwMzA4ODBmMWNjYzU1NWZlYjdhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCi0jaW1wb3J0ICJERkdXb3Jr
bGlzdC5oIgorI2ltcG9ydCAiSklUV29ya2xpc3QuaCIKICNpbXBvcnQgIkpTTWFuYWdlZFZhbHVl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2ltcG9y
dCAiSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCIKQEAgLTI3NSwxMSArMjc1LDcgQEAgSlNDb250
ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAq
dmlydHVhbE1hY2hpbmUpCiArIChOU1VJbnRlZ2VyKXNldE51bWJlck9mREZHQ29tcGlsZXJUaHJl
YWRzOihOU1VJbnRlZ2VyKW51bWJlck9mVGhyZWFkcwogewogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIEpTQzo6REZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBKU0M6OkRGRzo6ZXhpc3RpbmdHbG9i
YWxERkdXb3JrbGlzdE9yTnVsbCgpOwotICAgIGlmICh3b3JrbGlzdCkKLSAgICAgICAgcmV0dXJu
IHdvcmtsaXN0LT5zZXROdW1iZXJPZlRocmVhZHMobnVtYmVyT2ZUaHJlYWRzLCBKU0M6Ok9wdGlv
bnM6OnByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBKU0M6OkRGRzo6c2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMobnVtYmVy
T2ZUaHJlYWRzKTsKKyAgICByZXR1cm4gSlNDOjpKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29y
a2xpc3QoKS5zZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGlsYXRpb25zKG51bWJl
ck9mVGhyZWFkcyk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpAQCAtMjg4LDExICsyODQsNyBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21W
aXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSkKICsgKE5TVUlu
dGVnZXIpc2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHM6KE5TVUludGVnZXIpbnVtYmVyT2ZU
aHJlYWRzCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNDOjpERkc6OldvcmtsaXN0KiB3
b3JrbGlzdCA9IEpTQzo6REZHOjpleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCk7Ci0g
ICAgaWYgKHdvcmtsaXN0KQotICAgICAgICByZXR1cm4gd29ya2xpc3QtPnNldE51bWJlck9mVGhy
ZWFkcyhudW1iZXJPZlRocmVhZHMsIEpTQzo6T3B0aW9uczo6cHJpb3JpdHlEZWx0YU9mRlRMQ29t
cGlsZXJUaHJlYWRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEpTQzo6REZHOjpzZXRO
dW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyhudW1iZXJPZlRocmVhZHMpOworICAgIHJldHVybiBK
U0M6OkpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLnNldE1heGltdW1OdW1iZXJP
ZkNvbmN1cnJlbnRGVExDb21waWxhdGlvbnMobnVtYmVyT2ZUaHJlYWRzKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggZmY0N2Q2MTQyMjhhY2EwOTdhNWI0NWI1Nzlh
ZmVjNTI5M2IyNzJhMS4uMTdjMWU4MGY0OWI4ZTc0NTUxYTI4MTllNmExODg3ODMwOWExNDI1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAKICNp
bXBvcnQgIkN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmgiCi0jaW1wb3J0ICJERkdX
b3JrbGlzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3QuaCIKICNp
bXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKQEAgLTU0OSwxNCArNTQ4LDcgQEAgc3RhdGljIHZv
aWQgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiTnVtYmVy
IG9mIEZUTCB0aHJlYWRzIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZCIsIHVwZGF0ZWROdW1iZXJP
ZlRocmVhZHMgPT0gdGFyZ2V0TnVtYmVyT2ZUaHJlYWRzKTsKICAgICB9OwogCi0gICAgY2hlY2tS
ZXN1bHQoQCJydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkgbXVzdCBydW4gYXQgdGhlIHZlcnkgYmVn
aW5uaW5nIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIGdsb2JhbCBKSVQgd29ya2xpc3Qgd2Fz
IG5vdCBpbml0aWFsaXplZCB5ZXQiLCAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xp
c3RPck51bGwoKSAmJiAhSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwo
KSk7Ci0KLSAgICB0ZXN0REZHKCk7Ci0gICAgSlNDOjpERkc6OmVuc3VyZUdsb2JhbERGR1dvcmts
aXN0KCk7CiAgICAgdGVzdERGRygpOwotCi0gICAgdGVzdEZUTCgpOwotICAgIEpTQzo6REZHOjpl
bnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwogICAgIHRlc3RGVEwoKTsKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NTE2
Y2QyOGY2OWYxNjVlNDMwZTIxYTFiYjQzMjU2NDQ3N2NlYmVhLi41ZGY2OTNlZmQ3ZDcwMWE0MDRi
MjU3OWI2NWM4OWFmODQ4NDBkMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC02MDQsNyArNjA0LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKIAogICAgIGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5oCiAgICAgZGZnL0RGR0NvbW1v
bi5oCi0gICAgZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oCiAgICAgZGZnL0RGR0RvZXNHQ0NoZWNr
LmgKICAgICBkZmcvREZHTWluaWZpZWRJRC5oCiAKQEAgLTc3MSw2ICs3NzAsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGppdC9KSVRDb2RlTWFw
LmgKICAgICBqaXQvSklUQ29tcGlsYXRpb24uaAogICAgIGppdC9KSVRDb21waWxhdGlvbkVmZm9y
dC5oCisgICAgaml0L0pJVENvbXBpbGF0aW9uTW9kZS5oCiAgICAgaml0L0pJVE1hdGhJQ0Zvcndh
cmRzLmgKICAgICBqaXQvSklUT3BlcmF0aW9ucy5oCiAgICAgaml0L0pJVFN0dWJSb3V0aW5lLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmMwODQwYjYxZTA5MzE2ZjM1ZGQzYzM3
MGFlZDFhZDM4YWNlZGVhNC4uOTQyNzYxMTM0ZGExZjYwOTc1N2JiNWI4NzVhZTI2ZmE5MTFhYjUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NCw4ICsxNjQsNiBAQAogCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0Ey
MUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkIzOEYxRTE3M0E2
NzAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOEIxRTE3
M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwotCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk0MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovOyB9OwotCQkwRjFGQjM5NzFFMUFG
N0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZH
V29ya2xpc3RJbmxpbmVzLmggKi87IH07CiAJCTBGMUZCMzk5MUUxRjY1RkIwMEE5QkU1MCAvKiBN
dXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFGQjM5ODFFMUY2NUY5MDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oICov
OyB9OwogCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZFNTFCMTkyMkEzQkMw
MDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLzsgfTsKQEAgLTI3
Niw5ICsyNzQsNiBAQAogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJ
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1
MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYg
LyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovOyB9Owog
CQkwRjJGQ0NGQTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0YzMThBNjAwNzAw
MDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICovOyB9OwotCQkwRjJGQ0NGQzE4QTYwMDcw
MDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJGQ0NGNTE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50
LmggKi87IH07Ci0JCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y2MThB
NjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLzsgfTsKLQkJMEYyRkNDRkYxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWRE
YXRhLmggKi87IH07CiAJCTBGMzAwQjc4MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2lu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3
NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovOyB9OwogCQkwRjMwMEI3QzE4
QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdBMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9OwogCQkwRjMw
Q0I1RTFGQ0U0RTM3MDA0QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMENCNUQxRkNFNDZCNDAwNEI1MzIz
IC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzA0LDggKzI5OSw2IEBACiAJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1
MkJGQSAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzczMDkwMUMwQ0Q3MEMwMDA1MkJGQSAv
KiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyog
QWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggKi87IH07CiAJ
CTBGMzhCMDEyMTdDRjA3ODMwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDEwMTdDRjA3N0YwMEIx
NDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGls
YXRpb25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovOyB9Owot
CQkwRjM4QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1
MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTIxRDQ0MTk2ODAwNjgwNDk5IC8qIEF1
eGlsaWFyeUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzhEMkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEQyQTMx
RDQ0MTk2RDAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4RDJBMTFENDQxOTY2MDA2ODA0
OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZH
T1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzkyQzg4MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oICovOyB9OwpA
QCAtNDU5LDcgKzQ1Miw2IEBACiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4OThGMzIxQjI3Njg5RjAw
ODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5OEYzMDFCMjc2ODlGMDA4M0Ez
M0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY4RjE0
MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBv
Y2guaCAqLzsgfTsKLQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1v
dmFsUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi87
IH07CiAJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJE
QTUgLyogRlRMTGluay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYy
Qjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAqLzsgfTsKIAkJ
MEY4Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNFMTY2NzYzMkQwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTU5Miw3ICs1ODQsNiBAQAogCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLzsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlh
dGVkVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRM
VmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2MTc0ODMw
QTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRCMkNFQTE3NDg5NkM3MDA3
QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRK
U0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTExQjFGQUU2
MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAx
IC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTgzLDYgKzEx
NzQsMTUgQEAKIAkJNzBFQzBFQzcxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MEVDMEVDMTFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwNjFB
RkRCRUEyMDA0NDk3MzkgLyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAxMUFGREJFQTIwMDQ0
OTczOSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZU9i
amVjdERlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjEzMUJGODI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGNDI2NTg3
RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi87IH07CisJCTcyMTMxQkY5MjY1ODdFRjIw
MDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQu
aCAqLzsgfTsKKwkJNzIxMzFCRkEyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxMzFCRjYyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovOyB9OworCQk3MjEzMUJGQzI2NTg3RUZB
MDA3MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29y
a2xpc3RJbmxpbmVzLmggKi87IH07CisJCTcyMzk5OEY3MjY1REJDREIwMDU3ODY3RiAvKiBCYXNl
bGluZUpJVFBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMzk5OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLzsgfTsK
KwkJNzI2QjkxQjAyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBODI2NTgxNjUy
MDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLzsgfTsKKwkJNzI2QjkxQjMyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QjkxQUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENv
bXBpbGF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyNkI5MUI3MjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBRjI2NTgxNjUzMDA4
RTZGODIgLyogSklUUGxhbi5oICovOyB9OworCQk3MjZCOTFCQTI2NTgyNjNEMDA4RTZGODIgLyog
SklUQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5o
ICovOyB9OwogCQk3MzExRkEzMjI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczMTFGQTMx
MjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovOyB9OwogCQk3MzRCNjU1
NTIzRjVDMTA0MDBBMDY5RDEgLyogRGVsZXRlUHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MzRCNjU1NDIzRjRBMzMxMDBBMDY5RDEg
LyogRGVsZXRlUHJvcGVydHlTbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzNBRDA2MjkyM0ZGNjYyNjAwRjUzNTkzIC8qIERlbGV0ZUJ5U3Rh
dHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0FE
MDYyODIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0dXMuaCAqLzsgfTsKQEAgLTIzNjIs
OCArMjM2Miw2IEBACiAJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8q
IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOEMxRTE3M0E2MjAwQTlC
RTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMUZCMzk0MUUxQUY3REYwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuSW5saW5lcy5oOyBwYXRoID0gZGZnL0RG
R1BsYW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMUZCMzk1MUUx
QUY3REYwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3RJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUZCMzk4MUUxRjY1
RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjUzNywxMSArMjUzNSw2IEBACiAJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEQ0VQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkZDQ0YyMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdHcmFwaFNhZmVwb2ludC5j
cHA7IHBhdGggPSBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJGQ0NGMzE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR3JhcGhTYWZlcG9pbnQuaDsg
cGF0aCA9IGRmZy9ERkdHcmFwaFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjJGQ0NGNDE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NhZmVwb2ludC5jcHA7IHBhdGggPSBk
ZmcvREZHU2FmZXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkND
RjUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTYWZlcG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdTYWZlcG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyRkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8q
IERGR1NjYW5uYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY2Fu
bmFibGUuaDsgcGF0aCA9IGRmZy9ERkdTY2FubmFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYyRkNDRjcxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVGhyZWFkRGF0YS5jcHA7IHBh
dGggPSBkZmcvREZHVGhyZWFkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RocmVhZERhdGEuaDsgcGF0aCA9IGRmZy9ERkdUaHJl
YWREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc3MThBQjA1MTEw
MEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
SW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50ZWdlckNoZWNr
Q29tYmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4MiwxMCArMjU3NSw2IEBACiAJ
CTBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVXNlQ291bnRzLmg7IHBhdGggPSBiMy9haXIvQWlyVXNl
Q291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0Yw
MEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRF
bnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVu
dHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRFbnRyeXBvaW50Lmg7IHBhdGggPSBsbGlu
dC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzOEIw
MTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MzhCMDE0MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21waWxhdGlvbktleS5oOyBwYXRoID0gZGZnL0RG
R0NvbXBpbGF0aW9uS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMzhCMDE1
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRoID0gZGZn
L0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4
RDJBMDFENDQxOTY2MDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVy
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM5MkM4NzFCNDYx
ODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEZ1enouY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRG
dXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MzUsOCArMjgyNCw2IEBA
CiAJCTBGODk4RjMwMUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyUmFu
Z2VPcHRpbWl6YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXph
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYxNDJGMUFERjA5
MDEwMEVENzkyQyAvKiBERkdFcG9jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdFcG9jaC5jcHA7IHBhdGggPSBkZmcvREZHRXBvY2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMTQzMDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRXBvY2guaDsgcGF0aCA9IGRm
Zy9ERkdFcG9jaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjhGMTQzMTFBREYw
OTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgcGF0aCA9
IGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTW92SGludFJlbW92YWxQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBG
VExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAv
KiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA3OCw4ICszMDY1LDYgQEAKIAkJMEZEOEEz
MjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlh
dGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0g
ZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRo
ID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIy
Q0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxs
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQwNjIsNiArNDA0NywyMSBAQAogCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3
MzkgLyogSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMTFBRkRCRUEyMDA0NDk3MzkgLyogSlNUZW1w
bGF0ZU9iamVjdERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZU9iamVjdERlc2NyaXB0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxMzFCRjMyNjU4N0VGMjAwNzEx
NENGIC8qIEpJVFNhZmVwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjEz
MUJGNDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFNjYW5uYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjEzMUJGNTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNhZmVwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFBsYW5TdGFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjEzMUJGQjI2NTg3RUZBMDA3MTE0Q0YgLyogSklUV29y
a2xpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdvcmts
aXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM5OThGNTI2NURC
Q0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJhc2VsaW5lSklUUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklUUGxhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUE4MjY1ODE2NTIwMDhFNkY4MiAvKiBKSVRX
b3JrbGlzdFRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXb3Jr
bGlzdFRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFBQTI2NTgx
NjUzMDA4RTZGODIgLyogSklUUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2Qjkx
QUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUMyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhy
ZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFdvcmtsaXN0
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQUUyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjZCOTFBRjI2NTgxNjUzMDA4RTZGODIgLyogSklUUGxhbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktl
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbktleS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIg
LyogSklUQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUQ29tcGlsYXRpb25LZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MzExRkEzMTI0MERCMUQzMDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVsZXRlQnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzMxMUZBMzMyNDBEQjI0OTAwM0Q0OERCIC8qIERlbGV0ZUJ5SWRWYXJpYW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlbGV0ZUJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzMxOTBEOTYyNDAwOTM0OTAwRjg5MUM5IC8qIERlbGV0ZUJ5U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlbGV0ZUJ5U3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYxOTksNiArNjE5OSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkw
RjI0RTUzQjE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkw
RjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJNzIz
OTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8sCisJCQkJNzIz
OTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAogCQkJCTBGNjRC
MjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcw
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNB
OUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtNjI0Niw2ICs2MjQ4LDEw
IEBACiAJCQkJODZENDQ2RTgyNUIyMTI0ODAwRUNBRTc1IC8qIEpJVENvbXBpbGF0aW9uLmNwcCAq
LywKIAkJCQk4NkQ0NDZFNzI1QjIxMjQ4MDBFQ0FFNzUgLyogSklUQ29tcGlsYXRpb24uaCAqLywK
IAkJCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAq
LywKKwkJCQk3MjZCOTFCOTI2NTgyNjNDMDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25LZXkuY3Bw
ICovLAorCQkJCTcyNkI5MUI4MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5o
ICovLAorCQkJCTcyNkI5MUFFMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1vZGUu
Y3BwICovLAorCQkJCTcyNkI5MUFCMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbk1v
ZGUuaCAqLywKIAkJCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCAqLywKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmggKi8sCiAJCQkJRkUxODdBMEExQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5j
cHAgKi8sCkBAIC02MjcxLDEwICs2Mjc3LDE2IEBACiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQy
MTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8sCiAJCQkJMEYyNEU1NDUxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggKi8sCisJCQkJNzI2QjkxQUEyNjU4MTY1MzAwOEU2RjgyIC8q
IEpJVFBsYW4uY3BwICovLAorCQkJCTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFu
LmggKi8sCisJCQkJNzIxMzFCRjYyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICov
LAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Ki8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwICovLAogCQkJCUZFM0EwNkI4MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmln
aHRTaGlmdEdlbmVyYXRvci5oICovLAorCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBK
SVRTYWZlcG9pbnQuY3BwICovLAorCQkJCTcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRT
YWZlcG9pbnQuaCAqLywKKwkJCQk3MjEzMUJGNDI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5h
YmxlLmggKi8sCiAJCQkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5l
LmNwcCAqLywKIAkJCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
aCAqLywKIAkJCQlGRTQyMzg4RjFCRTE4QzEyMDA1MTQ3MzcgLyogSklUU3ViR2VuZXJhdG9yLmNw
cCAqLywKQEAgLTYyODUsNiArNjI5Nyw5IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJREMwMTg0
MTcxRDEwQzE4NzAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmNwcCAqLywKIAkJCQlEQzAxODQxODFE
MTBDMTg3MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCAqLywKKwkJCQk3MjEzMUJGQjI2NTg3RUZB
MDA3MTE0Q0YgLyogSklUV29ya2xpc3RJbmxpbmVzLmggKi8sCisJCQkJNzI2QjkxQUMyNjU4MTY1
MzAwOEU2RjgyIC8qIEpJVFdvcmtsaXN0VGhyZWFkLmNwcCAqLywKKwkJCQk3MjZCOTFBODI2NTgx
NjUyMDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3
NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKIAkJCQk3OTJDQjM0NzFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovLAogCQkJCTc5MkNCMzQ4MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovLApAQCAtODEwMiwxMCArODExNyw2
IEBACiAJCQkJMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovLAogCQkJ
CTBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCAqLywKIAkJCQkw
RkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovLAotCQkJCTBGMzhC
MDEzMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgKi8sCi0JCQkJMEYz
OEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8sCi0JCQkJMEYz
OEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8sCi0JCQkJ
MEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovLAogCQkJ
CTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAg
Ki8sCiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9p
c3RpbmdQaGFzZS5jcHAgKi8sCkBAIC04MjA5LDggKzgyMjAsNiBAQAogCQkJCUUzODUwQjE0MjI2
RUQ2M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oICovLAogCQkJCTBGMkJEQzRD
MTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAogCQkJCTBGMkJEQzNF
MTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKLQkJCQkwRjhGMTQzMTFB
REYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgKi8sCi0JCQkJMEY4
RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAqLywKIAkJ
CQkwRkYyQ0Q1OTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3Bw
ICovLAogCQkJCTBGRjJDRDVBMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9v
cHMuaCAqLywKQEAgLTgyNTgsNyArODI2Nyw2IEBACiAJCQkJMEYyQjlDREYxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhCODAwOURGNzQ0
IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQ
bGFuLmggKi8sCi0JCQkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVz
LmggKi8sCiAJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCkBAIC04Mjc1LDExICs4MjgzLDgg
QEAKIAkJCQk3OUZDOEEwNzFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVy
ZS5oICovLAogCQkJCTc5ODBDMTZBMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlU2V0LmNwcCAqLywKIAkJCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldC5oICovLAotCQkJCTBGMkZDQ0Y0MThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuY3BwICovLAotCQkJCTBGMkZDQ0Y1MThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdTYWZlcG9pbnQuaCAqLywKIAkJCQlBNzdBNDIzQzE3QTBCQkZEMDBBOERCODEgLyogREZHU2Fm
ZVRvRXhlY3V0ZS5oICovLAogCQkJCUE3NDEwMTdFMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovLAotCQkJCTBGMkZDQ0Y2MThBNjAw
NzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCAqLywKIAkJCQk4NkVDQTNGOTEzMkRGMjVBMDAy
QjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovLAogCQkJCTBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1
NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi8sCiAJCQkJMEYxRTNBNTAxNTM3QzJD
QjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8sCkBAIC04MzA4LDggKzgzMTMs
NiBAQAogCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBE
RkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLywKLQkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3
RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8sCi0JCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1
bmtzLmggKi8sCiAJCQkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtODM0OCw5ICs4MzUxLDYgQEAKIAkJCQkwRkZGQzk1
NDE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgg
Ki8sCiAJCQkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8sCi0JCQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmNwcCAqLywKLQkJCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyog
REZHV29ya2xpc3QuaCAqLywKLQkJCQkwRjFGQjM5NTFFMUFGN0RGMDBBOUJFNTAgLyogREZHV29y
a2xpc3RJbmxpbmVzLmggKi8sCiAJCQkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3Rk
ZmcuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBkZmc7CkBAIC05MzcwLDYgKzkzNzAsNyBAQAog
CQkJCTUzRDQ0NERDMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzNDFGQzcyMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHND
aGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNCMjFFNjBBRTQ3MDBDMTM4Mzkg
LyogQjNXaWR0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzOTk4RjcyNjVEQkNEQjAwNTc4NjdG
IC8qIEJhc2VsaW5lSklUUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAw
OTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDU4LDcgKzk0NTksNiBAQAogCQkJCUJDMThDNDVFMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFG
MDE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICov
LAotCQkJCUZFRjVCNDI5MjYyOEI1MjQwMDE2RTc3NiAvKiBKU1NldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMxNDE3RDQz
MjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTk1NzksOCAr
OTU3OSw2IEBACiAJCQkJMEYwNDM5NkUxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBE
RkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBC
MTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMzhCMDFB
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEIxQ0VCOTg5NTAw
MEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywK
QEAgLTk2MzksNyArOTYzNyw2IEBACiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODUwQjE1MjI2RUQ2NDEwMDlBQkY5
QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYx
NTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5
T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEUxNzk5RUEyRTAwODE3NTMz
IC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRUExMzJERUYx
QzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTY1Nyw3ICs5NjU0LDYg
QEAKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDI3MjYyOEFCRDkw
MDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
QzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NjcsNyArOTY2Myw2IEBACiAJ
CQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjFGQjM5NjFFMUFGN0UxMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBC
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTY3OCwxMCArOTY3Myw4IEBACiAJCQkJODZFQzlE
RDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAx
QTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MzE3QTBC
QkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGRDE4QTYwMDcwMDAxQTI3RjggLyog
REZHU2Nhbm5hYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJB
RDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFF
MjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05Njk3LDcgKzk2OTAsNiBAQAogCQkJCTBGQzIwQ0I2MTg1MkUyQzYw
MEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVj
dHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyRkNDRkYxOEE2MDA3MDAw
MUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5N0EyMTQ2
QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTcxNyw4ICs5NzA5LDYg
QEAKIAkJCQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcyNTMyIC8qIERGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdG
NDIxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmts
aXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5MDkxMTAwRDMzQjMz
IC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTYxQUE5MDkx
MTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTc1Miw2ICs5NzQyLDcgQEAKIAkJCQkxNDczNDFEMjFEQzAyRTJFMDBBQTI5
QkEgLyogRXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNF
OTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjAyOUQ5MUQ2
RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRUY1QjQzMDI2MkEzMzhCMDAxNkU3NzYgLyogRXhjZXB0aW9uRXhwZWN0YXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25G
dXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwMDBFMTZGNUNEMDBCMzQ0NjAgLyogRXhj
ZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAgLTk3ODgsNyArOTc3OSw2
IEBACiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0QXJndW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDIzMjYyOEEwRUUwMDE2RTc3
NiAvKiBIYXNoTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ2MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCOUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODMyLDcgKzk4
MjIsNiBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyog
RnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTBEMURDQTkyOTQw
MDE0RjlGRSAvKiBGdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVGNUI0
MkMyNjI4Q0JDODAwMTZFNzc2IC8qIFZNVHJhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtOTkxMSw2ICs5OTAwLDcg
QEAKIAkJCQkxNDJFMzEzNjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjMyNjI4QTBFRTAwMTZFNzc2IC8qIEhhc2hNYXBJ
bXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAz
IC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkE3QTk4MTNB
QURGRjgwMDVCN0MyQyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MTc3QTFEQzIyRjk1
OEQ1MDBCMzRDQTIgLyogSGVhcEFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDYyLDYg
KzEwMDUyLDggQEAKIAkJCQlGRTQ3NkZGNDIwN0U4NUQ1MDA5M0NBMkQgLyogSklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZENDQ2RUMyNUIyMTI2MDAwRUNBRTc1IC8qIEpJVENvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyog
SklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkI5MUJBMjY1ODI2
M0QwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2
QjkxQjMyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEQxQzAzMEQ1QzAwMzhCQkNBIC8qIEpJVERpdkdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJ
VEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwNzcsMTIgKzEwMDY5LDE4IEBACiAJ
CQkJODZENDQ2RUEyNUIyMTI1MzAwRUNBRTc1IC8qIEpJVE9wYXF1ZUJ5cHJvZHVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzQ0EzQTRFMjUyN0FCMkYwMDQ4MDJCRiAvKiBKSVRPcGVyYXRpb25M
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QjkxQjcyNjU4MTY1MzAwOEU2Rjgy
IC8qIEpJVFBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMTMxQkZBMjY1ODdFRjIwMDcxMTRD
RiAvKiBKSVRQbGFuU3RhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEw
MDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjEzMUJGOTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjEzMUJGODI2NTg3RUYyMDA3MTE0Q0YgLyogSklUU2Nhbm5hYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8q
IEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyMTMxQkZDMjY1ODdFRkEwMDcxMTRDRiAvKiBKSVRXb3JrbGlzdElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkI5MUIwMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRXb3Jr
bGlzdFRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNDNEY2NkIyMUIxQTQwOTAwMkZEMDA5
IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFB
MUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMy
Q0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAxODQsNiArMTAxODIsNyBAQAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZC
QyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3
OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkVGNUI0MjUyNjI4QTg1MDAwMTZFNzc2IC8qIEpTTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEIyODZEMUVCOEU2RDUwMDBFQjVEMiAvKiBKU01hcmtpbmdDb25zdHJh
aW50UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEz
IC8qIEpTTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjE5LDYgKzEwMjE4LDcgQEAK
IAkJCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mjk5RDlFMTdEMTI4Mzcw
MDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjkyNjI4QjUyNDAw
MTZFNzc2IC8qIEpTU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5MERENzAxODJG
NDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJERkNC
MkJCRTkwRjQxMzQ5RTFCMEJFRCAvKiBKU1NvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDI0NywxMiArMTAyNDcsMTIgQEAKIAkJCQk4NkUzQzYxMjE2N0JBQkQ3MDA2RDc2MEEgLyog
SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFMUY4RjgyMTU0NzE1QTAw
MDFEREJDIC8qIEpTVmFsdWVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRThDMDMxMjI2
NEE2OTExMDAxQTQ0QUQgLyogU2xvd1BhdGhGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWVSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMg
LyogSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4
MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFRjVC
NDI3MjYyOEFCRDkwMDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlCRkJCMDIyQUQz
Q0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTMx
LDYgKzEwNTMxLDcgQEAKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTA0MTU1MzI1MkVDMDczMDA5MUVCNUQg
LyogU2xvdFZpc2l0b3JNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDlGMkYwMTdBMEFD
MDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOEMwMzEy
MjY0QTY5MTEwMDFBNDRBRCAvKiBTbG93UGF0aEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVCNEEzMzFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0YyM0E4MjFFQ0YxM0ZFMDA5NzhEOTkgLyogU25pcHBldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDU2OCw3ICsxMDU2OSw2IEBACiAJCQkJQkNERTNBQjgwRTZD
ODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk4Njk0M0Ix
RjhDMEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICov
LAotCQkJCUZFRjVCNDI1MjYyOEE4NTAwMDE2RTc3NiAvKiBKU01hcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1
cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDY2MSw2ICsxMDY2MSw3
IEBACiAJCQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUM1Nzk3MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNTZERTFFNjRFQUQ2MDBEMTc4MDEgLyogVk1U
cmFwcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MkMyNjI4Q0JDODAwMTZFNzc2IC8qIFZN
VHJhcHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5
REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Y0MEU5MzFE
NUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzQ0E3MzBBMUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xMDc1Myw3ICsxMDc1NCw2IEBACiAJCQkJQURFODAyOUExRTA4RjFERTAwNThERTc4IC8q
IFdlYkFzc2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
RTgwMjlDMUUwOEYxREUwMDU4REU3OCAvKiBXZWJBc3NlbWJseUxpbmtFcnJvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRjUxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRjVCNDMwMjYyQTMz
OEIwMDE2RTc3NiAvKiBFeGNlcHRpb25FeHBlY3RhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQyRkNDMUExREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JGNzFEQjU4REFEMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzFCMURC
NTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5sdXQuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNlZWZhMDRkYjUxMzU1MzVl
ZWZhZGZkNzMxNzY1NDgxM2E2ODY2YzguLmJjMWNiM2Q5Y2VkNzM0OTE1NjUxMGY3Y2JjYmNhOTFk
Nzk3NDVkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTEsNCArMSw0IEBACi0v
LyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0MSw4ICszNDEsNiBAQCBk
ZmcvREZHQ29kZU9yaWdpblBvb2wuY3BwCiBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKIGRm
Zy9ERkdDb21tb24uY3BwCiBkZmcvREZHQ29tbW9uRGF0YS5jcHAKLWRmZy9ERkdDb21waWxhdGlv
bktleS5jcHAKLWRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwCiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCiBkZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcAogZGZnL0RGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCkBAIC00MTYsNyArNDE0LDYgQEAgZGZnL0RGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwCiBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKIGRmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKLWRm
Zy9ERkdTYWZlcG9pbnQuY3BwCiBkZmcvREZHU25pcHBldFBhcmFtcy5jcHAKIC8vIFRoZXNlIGZp
bGVzIHRha2UgYSBsb25nIHRpbWUgdG8gY29tcGlsZSBzbyB3ZSBkbyB0aGVtIGluZGl2aWR1YWxs
eS4KIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgQG5vLXVuaWZ5CkBAIC00MjgsNyArNDI1LDYg
QEAgZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKIGRmZy9ERkdTdG9yZUJh
cnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCi1kZmcvREZHVGhyZWFkRGF0YS5j
cHAKIGRmZy9ERkdUaHVua3MuY3BwCiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5j
cHAKIGRmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKQEAgLTQ0OCw3
ICs0NDQsNiBAQCBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAKIGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcAogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKIGRm
Zy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAotZGZnL0RGR1dvcmtsaXN0LmNwcAog
CiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCiBkaXNhc3NlbWJsZXIvQ2Fwc3Rv
bmVEaXNhc3NlbWJsZXIuY3BwCkBAIC02MjQsNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNw
cAogaml0L0NDYWxsSGVscGVycy5jcHAKIGppdC9DYWNoZWRSZWNvdmVyeS5jcHAKQEAgLTY0OCw2
ICs2NDQsOCBAQCBqaXQvSklUQ2FsbC5jcHAKIGppdC9KSVRDYWxsMzJfNjQuY3BwCiBqaXQvSklU
Q29kZS5jcHAKIGppdC9KSVRDb21waWxhdGlvbi5jcHAKK2ppdC9KSVRDb21waWxhdGlvbktleS5j
cHAKK2ppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwCiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcAog
aml0L0pJVERpdkdlbmVyYXRvci5jcHAKIGppdC9KSVRFeGNlcHRpb25zLmNwcApAQCAtNjU5LDE0
ICs2NTcsMTcgQEAgaml0L0pJVE9wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBqaXQvSklUT3Bjb2Rlcy5j
cHAKIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCiBqaXQvSklUT3BlcmF0aW9ucy5jcHAKK2ppdC9K
SVRQbGFuLmNwcAogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAKK2ppdC9KSVRTYWZl
cG9pbnQuY3BwCiBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNw
cAogaml0L0pJVFRodW5rcy5jcHAKIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAKIGppdC9KSVRXb3JrbGlzdC5jcHAKK2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAK
IGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5jcHAKIGppdC9SZWcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCmluZGV4IDU2Mzg4YTA2ZDdjNjJkNDhkZDc4MDliNjQwNmRhYmEwMDVmOGM5MWMu
LjdkZjA1ZTEwYmM5MGI2NTZmMzUwM2M4NWMwNTRjNWQzYWZhN2M2YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00Myw3ICs0Myw2IEBACiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5j
bHVkZSAiREZHSklUQ29kZS5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
RXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db2RlQmxvY2suaCIKQEAgLTU1LDYgKzU0LDcgQEAKICNpbmNsdWRlICJJc29DZWxs
U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgor
I2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgpAQCAt
MjU5OCw5ICsyNTk4LDggQEAgaW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVl
KGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIGJvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1p
emF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0
T3JOdWxsKCkpIHsKLSAgICAgICAgaWYgKHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6
Q29tcGlsYXRpb25LZXkodGhpcywgREZHOjpERkdNb2RlKSkKLSAgICAgICAgICAgID09IERGRzo6
V29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgaWYgKEpJVFdvcmtsaXN0KiB3b3JrbGlzdCA9IEpJ
VFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCkpIHsKKyAgICAgICAgaWYg
KHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKEpJVENvbXBpbGF0aW9uS2V5KHRoaXMsIEpJVENv
bXBpbGF0aW9uTW9kZTo6REZHKSkgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7CiAgICAgICAg
ICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAppbmRleCA4MmIxNDZkZmIwMmY2MzQ1Y2ZmYjU2Y2Y2YTAyYzcxYWUyMGQ4NDVmLi5j
Y2U3ODJjMWUzYzc4MDk1YWE0ZjU3NWYwMWQyZjY1NWI0MzFiZjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNjk3MCw3ICs2OTcw
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2Rl
KSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jYXRjaCk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCmluZGV4IGIwNDYxN2M1NjBiNjY3MjhhMTViODE0MGJlOWUyMzgwODgwNTE5YTUuLmM2NmZi
MjIzOWY4ZmQyN2ZhOTFjN2E5N2U2YjVjNmJiODE3ZTkxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKKyNpbmNsdWRlICJKSVRDb21waWxhdGlvbk1v
ZGUuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC02NiwxNyArNjYsMTcgQEAgZW51bSBT
d2l0Y2hLaW5kIHsKICAgICBTd2l0Y2hDZWxsCiB9OwogCi1pbmxpbmUgYm9vbCB2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKENvbXBpbGF0aW9uTW9kZSBtb2RlID0gREZHTW9kZSkKK2lubGluZSBi
b29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBK
SVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZUNv
bXBpbGF0aW9uKCkgfHwgT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKSB8fCAoaXNGVEwo
bW9kZSkgJiYgT3B0aW9uczo6dmVyYm9zZUZUTENvbXBpbGF0aW9uKCkpOwogfQogCi1pbmxpbmUg
Ym9vbCBsb2dDb21waWxhdGlvbkNoYW5nZXMoQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBERkdNb2Rl
KQoraW5saW5lIGJvb2wgbG9nQ29tcGlsYXRpb25DaGFuZ2VzKEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlID0gSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiB7CiAgICAgcmV0dXJuIHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQobW9kZSkgfHwgT3B0aW9uczo6bG9nQ29tcGlsYXRpb25DaGFuZ2VzKCk7
CiB9CiAKLWlubGluZSBib29sIHNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKENvbXBpbGF0aW9u
TW9kZSBtb2RlKQoraW5saW5lIGJvb2wgc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UoSklUQ29t
cGlsYXRpb25Nb2RlIG1vZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAgICBpZiAo
aXNGVEwobW9kZSkpCiAgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFz
ZSgpIHx8IE9wdGlvbnM6OmR1bXBERkdGVExHcmFwaEF0RWFjaFBoYXNlKCk7CkBAIC0zNTksNyAr
MzU5LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBsZWFzdFVwcGVyQm91bmQoQ2FwYWJpbGl0
eUxldmVsIGEsIENhcGFiaWxpdHlMZXZlbCBiKQogfQogCiAvLyBVbmNvbmRpdGlvbmFsbHkgZGlz
YWJsZSBERkcgZGlzYXNzZW1ibHkgc3VwcG9ydCBpZiB0aGUgREZHIGlzIG5vdCBjb21waWxlZCBp
bi4KLWlubGluZSBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseShDb21waWxhdGlvbk1vZGUgbW9k
ZSA9IERGR01vZGUpCitpbmxpbmUgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHkoSklUQ29tcGls
YXRpb25Nb2RlIG1vZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkgfHwgKGlzRlRMKG1vZGUpICYmIE9wdGlvbnM6OmR1bXBG
VExEaXNhc3NlbWJseSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tcGlsYXRpb25LZXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21w
aWxhdGlvbktleS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNDE2ZmZiZWEy
OGYxYWQzMmIzNDYxYzU4NGI5NzIwMTdhYjBkYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxh
dGlvbktleS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJERkdDb21waWxhdGlvbktleS5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewotCi12b2lkIENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Ci17Ci0gICAgaWYgKCEqdGhpcykgewotICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3By
b2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7Ci19Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tcGlsYXRpb25LZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tcGlsYXRpb25LZXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0NmY1ZWRh
MzlhMDY3NTM3YzZjODBlOTEyYzRjYTZkMjM4MTcyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBp
bGF0aW9uS2V5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIENvZGVCbG9ja1Nl
dDsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIENvbXBpbGF0aW9uS2V5IHsKLXB1YmxpYzoK
LSAgICBDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIp
Ci0gICAgICAgICwgbV9tb2RlKEludmFsaWRDb21waWxhdGlvbk1vZGUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCi0gICAgICAgICwgbV9tb2RlKERG
R01vZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDb21waWxhdGlvbktleShDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQotICAgICAgICAsIG1fbW9kZShtb2RlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEludmFsaWRDb21waWxhdGlvbk1vZGU7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEludmFs
aWRDb21waWxhdGlvbk1vZGU7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQotICAgIENvbXBpbGF0aW9u
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCi0gICAgICAg
ICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBtX21vZGUpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKLSAgICBDb21waWxhdGlvbk1vZGUg
bV9tb2RlOwotfTsKLQotc3RydWN0IENvbXBpbGF0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29tcGlsYXRpb25LZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvbXBpbGF0aW9uS2V5JiBhLCBjb25z
dCBDb21waWxhdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6REZHOjpDb21waWxhdGlvbktleT4gOiBKU0M6OkRGRzo6Q29tcGlsYXRpb25LZXlI
YXNoIHsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Ci10ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpDb21waWxhdGlvbktleT4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkNvbXBpbGF0aW9uS2V5PiB7IH07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21waWxhdGlvbk1vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxh
dGlvbk1vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQ5NTMzMWNkODEx
NzEyZjA2NzA4NDUzNzdjOWJmNDhhZTg5YWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRp
b25Nb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9kZS5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLW5h
bWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7Ci0KLXZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludmFsaWRDb21waWxhdGlvbk1vZGU6Ci0gICAgICAg
IG91dC5wcmludCgiSW52YWxpZENvbXBpbGF0aW9uTW9kZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBERkdNb2RlOgotICAgICAgICBvdXQucHJpbnQoIkRGR01vZGUiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRlRMTW9kZToKLSAgICAgICAgb3V0LnByaW50KCJGVExNb2RlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZToKLSAgICAgICAg
b3V0LnByaW50KCJGVExGb3JPU1JFbnRyeU1vZGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlv
bk1vZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4YTgzOTE1NWU3YzRiMGI5
ZDk2ODYyYWEyZDQ4NDdkMTU5ZmNhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9uTW9k
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWVudW0g
Q29tcGlsYXRpb25Nb2RlIHsKLSAgICBJbnZhbGlkQ29tcGlsYXRpb25Nb2RlLAotICAgIERGR01v
ZGUsCi0gICAgRlRMTW9kZSwKLSAgICBGVExGb3JPU1JFbnRyeU1vZGUKLX07Ci0KLWlubGluZSBi
b29sIGlzRlRMKENvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgRlRMTW9kZToKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZToKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkNvbXBpbGF0aW9uTW9kZSk7
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCmluZGV4IGUzMzBjNjBmMTExNDc4ZDM3NDA1YTI4YjM4Y2Y0NjBiYTZkYTc1NmQuLjZkNWE0
NDA5ODIyN2I1OTU1ZDgyNThkMjRlZWJkYThjMjg1MWQ4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKLSNp
bmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQWxsb3dsaXN0LmgiCiAj
aW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgpAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRnVuY3Rpb25BbGxvd2xpc3Qm
IGVuc3VyZUdsb2JhbERGR0FsbG93bGlzdCgpCiB9CiAKIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKKyAgICBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSwKICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CkBAIC04NSwyMCArODUsMTMgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgICAgICAqbmV3IFBsYW4oY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywg
bW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAKICAgICBw
bGFuLT5zZXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgaWYgKE9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBXb3JrbGlzdCYgd29ya2xpc3QgPSBlbnN1cmVH
bG9iYWxXb3JrbGlzdEZvcihtb2RlKTsKLSAgICAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cyhtb2RlKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBERkcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiB3aXRoIHF1ZXVlIGxlbmd0aCAiLCB3b3JrbGlzdC5xdWV1ZUxl
bmd0aCgpLCAiLlxuIik7Ci0gICAgICAgIHdvcmtsaXN0LmVucXVldWUoV1RGTW92ZShwbGFuKSk7
Ci0gICAgICAgIHJldHVybiBDb21waWxhdGlvbkRlZmVycmVkOwotICAgIH0KLSAgICAKLSAgICBw
bGFuLT5jb21waWxlSW5UaHJlYWQobnVsbHB0cik7Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXpl
V2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CisgICAgSklUV29ya2xpc3QmIHdvcmtsaXN0ID0g
SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dXNlQ29uY3VycmVudEpJVCgpICYmIGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtb2RlKSwg
IkRlZmVycmluZyBERkcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiB3aXRoIHF1ZXVl
IGxlbmd0aCAiLCB3b3JrbGlzdC5xdWV1ZUxlbmd0aCgpLCAiLlxuIik7CisgICAgcmV0dXJuIHdv
cmtsaXN0LmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiB9CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJ
VCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBWTSYsIENvZGVC
bG9jayosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCwgY29uc3Qg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiwKKyAgICBWTSYsIENvZGVCbG9jayosIENvZGVC
bG9jayosIEpJVENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+JiwKICAgICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiYmKQogewogICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAgLTEwNiwxNSArOTksMTMg
QEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBp
bGF0aW9uTW9kZSBtb2RlLAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVC
bG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLAogICAg
IEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBjb21waWxlSW1wbCgKICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2Rl
QmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywKICAg
ICAgICAgY2FsbGJhY2suY29weVJlZigpKTsKLSAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQpCi0gICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVC
bG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKaW5kZXggYzdiYTdmNmFjNzdl
ZGI2ZDM4ZGExYmNiZmE0ZmZmYzFkNzQ4NTlkYy4uMmExYzljMTAxN2UyYzUzZTI5MmMwYzNmOTk5
YmZmMDQxN2UyZDg4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9u
TW9kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw3
ICs0MCw3IEBAIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygp
OwogLy8gSWYgdGhlIHdvcmtsaXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29t
cGlsZS4gT3RoZXJ3aXNlIHdlIGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYg
d2UgZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRo
ZSByZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIFZNJiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlLAorICAg
IFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25Nb2RlLAogICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBj
b25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAg
UmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAppbmRleCBkMmJkODk3ZDRmODQ1YzY4Njg1ODZkYWYyYmJjNzQ5MWEzOGEx
OGQ5Li45YjY4NGVlMzBlNGRjNWQyYjk4ZGE5OGM2YzI5ODFlNjdhZTIxYWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSAiREZH
Tm9kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdQcm9wZXJ0eVR5cGVL
ZXkuaCIKLSNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oIgorI2luY2x1ZGUgIkpJVFNjYW5uYWJsZS5oIgogI2luY2x1ZGUgIk1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGhTYWZlcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGhTYWZlcG9pbnQuaAppbmRleCBmNTdmMjQ2MDRjMGQzNTYyYzk0NzhkZDc4Mjk0NGQ3M2M5MmI5
ZWMxLi5mNWE2ZmQ2ZjIwNmIyY2QzZDA0ZWRkYTVjNzdhNTEzODNlNTg2M2FjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCisjaW5j
bHVkZSAiSklUU2FmZXBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggNDg1Yzc3NDdiYTQwMTQxOGM5NjI3YTRk
ODM0NGQ3YjIzN2FjMWJmYy4uNWIyZmMwNWZmMThkMmFjMzNjM2NmOGE2MDVkYTYxM2EyYzhjMzg2
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2LDcgKzE2Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYXQgbGVhc3Qg
c29tZSB2YWxpZGF0aW9uIHdoZW4gT1NSIGVudGVyaW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NTExCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSAhPSBKSVRDb21waWxhdGlvbk1v
ZGU6OkZUTEZvck9TUkVudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZhaWxh
YmlsaXR5TWFwLm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eU1h
cC5tX2xvY2Fsc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggOGVhZTgxZjQ5NWFkZDg4
ZDNmYTczZWRhODJhZTVkYjQ2ZDczMjRiMy4uM2IxMDgzZjYxODFiNTdkOTdjOWU5ZmZmYmNlN2Nh
ZDdlMTgxNDhmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9k
ZTo6RlRMRm9yT1NSRW50cnkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUyk7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBlMTgxN2ExY2MxZTkzNTRkNGIy
NWY5ZmIwNWJhNTBlNjVlYTM0MzZhLi5lMzM2OThlOGU2NTFhMzY5MzE0OWJjMDgyOWM1NjM5YmJk
YzUzMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
QEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiREZHV29y
a2xpc3QuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKICNpbmNsdWRlICJEZWZpbmVQcm9w
ZXJ0eUF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTQ0LDYg
KzQzLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKICNpbmNsdWRlICJIYXNPd25Qcm9w
ZXJ0eUNhY2hlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKSVRXb3Jr
bGlzdC5oIgogI2luY2x1ZGUgIkpTQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvci5oIgpAQCAtMzcwMSwxNCArMzcw
MSwxMCBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxlKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7Ci0gICAgaWYgKFdvcmtsaXN0
KiB3b3JrbGlzdCA9IGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKSkgewotICAgICAg
ICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAot
ICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCksIEZUTE1vZGUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmts
aXN0OjpOb3RLbm93bjsKKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJ
VFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKAorICAgICAgICB2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEwpKTsKICAgICAKLSAgICBpZiAod29ya2xp
c3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUg
PT0gSklUV29ya2xpc3Q6OkNvbXBpbGluZykgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgic3RpbGwgY29tcGlsaW5nIikpOwogICAg
ICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoCiAgICAgICAgICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwpAQCAt
MzcyMyw3ICszNzE5LDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGls
ZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxl
ZCkgeworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewog
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIs
ICgiY29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdl
IGZpbmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0IGNhc2UgdGhl
CiAgICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KQEAgLTM3
MzQsNyArMzczMCw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAvLyBX
ZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0sIGNv
ZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29kZUlu
ZGV4KCksCisgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEwsIEJ5dGVjb2RlSW5kZXgoKSwKICAgICAgICAgT3Bl
cmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVy
IGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpAQCAtMzc5MCwxMiArMzc4Niw4IEBAIHN0
YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQnl0
ZWNvZGVJbmRleCBvcmlnaW5CeXRlCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCiAgICAgLy8gUmVzb2x2ZSBhbnkgcGVuZGluZyBwbGFuIGZvciBP
U1IgRW50ZXIgb24gdGhpcyBmdW5jdGlvbi4KLSAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RT
dGF0ZTsKLSAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3Jr
bGlzdE9yTnVsbCgpKSB7Ci0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxl
dGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgSklU
V29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFs
V29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgdm0sIEpJVENv
bXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEpJVENvbXBpbGF0aW9u
TW9kZTo6RlRMRm9yT1NSRW50cnkpKTsKIAogICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAgCkBAIC0zODIzLDcgKzM4MTUsNyBAQCBzdGF0aWMg
Y2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2Rl
SW5kZXggb3JpZ2luQnl0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHdvcmtsaXN0U3Rh
dGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJ
VFdvcmtsaXN0OjpDb21waWxpbmcpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2Rl
QmxvY2ssICJkZWxheUZUTENvbXBpbGUiLCAoInN0aWxsIGNvbXBpbGluZyIpKTsKICAgICAgICAg
aml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMzg3NCw3ICszODY2LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9yaWdpbkJ5dGUKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkg
eworICAgIGlmICh3b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgi
Y29tcGlsZWQgYW5kIGZhaWxlZCIpKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBp
bGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNvZGUgYmxvY2sgIiwgKmNvZGVC
bG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQuIik7CkBAIC0zOTg1LDcgKzM5NzcsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29t
bW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggb3JpZ2luQnl0
ZQogCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJ0cmlnZ2VyRlRMT1NSIiwg
KCkpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGlsZSgKLSAg
ICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5
TW9kZSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwKKyAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJs
b2NrLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnksIG9yaWdp
bkJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSh0cmlnZ2VyQWRkcmVzcykpOwog
CiAgICAgaWYgKGppdENvZGUtPm5ldmVyRXhlY3V0ZWRFbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCmluZGV4IDk3NGEzMTBjN2VjZjc3NWYwYzkxY2I0N2YwMzFiNTE0MDY4
NDUxM2UuLmM0YzgyOGY0ZmYxZDljYTQ2NTFhMzc2Y2FkZTJkMDJkNWViNTkwNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtODgsMTUgKzg4LDYgQEAKICNpbmNsdWRl
ICJGVExTdGF0ZS5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0MgewotCi1leHRlcm4gU2Vjb25k
cyB0b3RhbERGR0NvbXBpbGVUaW1lOwotZXh0ZXJuIFNlY29uZHMgdG90YWxGVExDb21waWxlVGlt
ZTsKLWV4dGVybiBTZWNvbmRzIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7Ci1leHRlcm4gU2Vjb25k
cyB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7Ci0KLX0KLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBuYW1lc3BhY2UgewpAQCAtMTEzLDE3ICsxMDQsMTggQEAgdm9pZCBkdW1wQW5k
VmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0LCBib29sIGZvcmNlRHVt
cCA9IGZhbHNlKQogICAgICAgICB2YWxpZGF0ZShncmFwaCwgbW9kZUZvckZpbmFsVmFsaWRhdGUp
OwogfQogCi1Qcm9maWxlcjo6Q29tcGlsYXRpb25LaW5kIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
Rm9yTW9kZShDb21waWxhdGlvbk1vZGUgbW9kZSkKK1Byb2ZpbGVyOjpDb21waWxhdGlvbktpbmQg
cHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQog
ewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW52YWxpZENvbXBpbGF0aW9uTW9kZToK
KyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOgorICAgIGNh
c2UgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFByb2ZpbGVyOjpERkc7Ci0gICAgY2FzZSBE
RkdNb2RlOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpERkc6CiAgICAgICAgIHJldHVy
biBQcm9maWxlcjo6REZHOwotICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNlIEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMOgogICAgICAgICByZXR1cm4gUHJvZmlsZXI6OkZUTDsKLSAgICBjYXNlIEZU
TEZvck9TUkVudHJ5TW9kZToKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NS
RW50cnk6CiAgICAgICAgIHJldHVybiBQcm9maWxlcjo6RlRMRm9yT1NSRW50cnk7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzMsMjAgKzEyNSwxNyBAQCBQ
cm9maWxlcjo6Q29tcGlsYXRpb25LaW5kIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5kRm9yTW9kZShD
b21waWxhdGlvbk1vZGUgbW9kZSkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBQbGFuOjpQ
bGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29k
ZUJsb2NrLAotICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlLCBCeXRlY29kZUluZGV4IG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSwgQnl0ZWNvZGVJbmRl
eCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNW
YWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAgIDogbV9tb2RlKG1vZGUpCi0gICAgLCBtX3Zt
KCZwYXNzZWRDb2RlQmxvY2stPnZtKCkpCi0gICAgLCBtX2NvZGVCbG9jayhwYXNzZWRDb2RlQmxv
Y2spCi0gICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2NrKQot
ICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgLCBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgLCBtX2NvbXBpbGF0
aW9uKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikgPyBhZG9wdFJlZihuZXcg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJl
Qnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2Rl
KG1vZGUpKSkgOiBudWxscHRyKQotICAgICwgbV9pbmxpbmVDYWxsRnJhbWVzKGFkb3B0UmVmKG5l
dyBJbmxpbmVDYWxsRnJhbWVTZXQoKSkpCi0gICAgLCBtX2lkZW50aWZpZXJzKG1fY29kZUJsb2Nr
KQotICAgICwgbV93ZWFrUmVmZXJlbmNlcyhtX2NvZGVCbG9jaykKLSAgICAsIG1fdHJhbnNpdGlv
bnMobV9jb2RlQmxvY2spCi0gICAgLCBtX3N0YWdlKFByZXBhcmluZykKKyAgICAgICAgOiBCYXNl
KG1vZGUsIHBhc3NlZENvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0
SGFuZGxlVmFsdWVzKQorICAgICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBtX2NvbXBpbGF0aW9uKFVOTElLRUxZKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlcikgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJs
b2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKG1vZGUpKSkgOiBudWxscHRyKQor
ICAgICAgICAsIG1faW5saW5lQ2FsbEZyYW1lcyhhZG9wdFJlZihuZXcgSW5saW5lQ2FsbEZyYW1l
U2V0KCkpKQorICAgICAgICAsIG1faWRlbnRpZmllcnMobV9jb2RlQmxvY2spCisgICAgICAgICwg
bV93ZWFrUmVmZXJlbmNlcyhtX2NvZGVCbG9jaykKKyAgICAgICAgLCBtX3RyYW5zaXRpb25zKG1f
Y29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT5qaXRDb2RlKCkpOwogICAgIG1faW5saW5lQ2FsbEZyYW1lcy0+ZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOwpAQCAtMTU2LDg0ICsxNDUsMzggQEAgUGxhbjo6flBsYW4oKQogewogfQogCi1i
b29sIFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMoKSBjb25zdAorc2l6ZV90IFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVwb3J0Q29tcGlsZVRpbWVzKCkKLSAgICAgICAg
fHwgT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKQotICAgICAgICB8fCAobV92bSAm
JiBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpOworICAgIGlmICghbV9maW5hbGl6ZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ZpbmFsaXplci0+Y29kZVNpemUoKTsKIH0K
IAotYm9vbCBQbGFuOjpyZXBvcnRDb21waWxlVGltZXMoKSBjb25zdAordm9pZCBQbGFuOjpmaW5h
bGl6ZUluR0MoKQogewotICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKQot
ICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRERkdDb21waWxlVGltZXMoKQotICAgICAgICB8fCAo
T3B0aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwoKSk7CisgICAgQVNTRVJU
KG1fdm0pOworICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygq
bV92bSk7CiB9CiAKLXZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHRocmVh
ZERhdGEpCit2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKLSAgICBtX3RocmVhZERhdGEgPSB0
aHJlYWREYXRhOwotCi0gICAgTW9ub3RvbmljVGltZSBiZWZvcmUgeyB9OwotICAgIENTdHJpbmcg
Y29kZUJsb2NrTmFtZTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkK
LSAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHJlcG9ydENvbXBpbGVUaW1lcygpKSkKLSAgICAgICAgY29kZUJsb2NrTmFtZSA9IHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spOwotCi0gICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3Bl
OwotCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtX21vZGUpIHx8IE9wdGlvbnM6Omxv
Z1BoYXNlVGltZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAq
bV9jb2RlQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIsIGluc3RydWN0aW9ucyBzaXplID0gIiwg
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSwgIlxuIik7Ci0KLSAgICBDb21waWxhdGlv
blBhdGggcGF0aCA9IGNvbXBpbGVJblRocmVhZEltcGwoKTsKLQotICAgIFJFTEVBU0VfQVNTRVJU
KHBhdGggPT0gQ2FuY2VsUGF0aCB8fCBtX2ZpbmFsaXplcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
KHBhdGggPT0gQ2FuY2VsUGF0aCkgPT0gKG1fc3RhZ2UgPT0gQ2FuY2VsbGVkKSk7CisgICAgQmFz
ZTo6bm90aWZ5UmVhZHkoKTsKKyAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29tZVJl
YWR5QXN5bmNocm9ub3VzbHkobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwor
fQogCi0gICAgTW9ub3RvbmljVGltZSBhZnRlciB7IH07Ci0gICAgaWYgKFVOTElLRUxZKGNvbXB1
dGVDb21waWxlVGltZXMoKSkpIHsKLSAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLSAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkp
IHsKLSAgICAgICAgICAgIGlmIChpc0ZUTCgpKSB7Ci0gICAgICAgICAgICAgICAgdG90YWxGVExD
b21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKLSAgICAgICAgICAgICAgICB0b3RhbEZUTERG
R0NvbXBpbGVUaW1lICs9IG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKLSAgICAgICAgICAgICAg
ICB0b3RhbEZUTEIzQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEw7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0b3RhbERGR0NvbXBpbGVUaW1lICs9IGFm
dGVyIC0gYmVmb3JlOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHBhdGhOYW1l
ID0gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHBhdGgpIHsKLSAgICBjYXNlIEZhaWxQYXRoOgotICAg
ICAgICBwYXRoTmFtZSA9ICJOL0EgKGZhaWwpIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBE
RkdQYXRoOgotICAgICAgICBwYXRoTmFtZSA9ICJERkciOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZUTFBhdGg6Ci0gICAgICAgIHBhdGhOYW1lID0gIkZUTCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ2FuY2VsUGF0aDoKLSAgICAgICAgcGF0aE5hbWUgPSAiQ2FuY2VsbGVkIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChtX2NvZGVCbG9jaykgeyAv
LyBtX2NvZGVCbG9jayB3aWxsIGJlIG51bGwgaWYgdGhlIGNvbXBpbGF0aW9uIHdhcyBjYW5jZWxs
ZWQuCi0gICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCi0gICAgICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZnRsQ29tcGlsZSIsICgidG9vayAiLCAoYWZ0ZXIgLSBi
ZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIChERkc6ICIsIChtX3RpbWVCZWZvcmVGVEwgLSBi
ZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiLCBCMzogIiwgKGFmdGVyIC0gbV90aW1lQmVmb3JlRlRM
KS5taWxsaXNlY29uZHMoKSwgIikgd2l0aCAiLCBwYXRoTmFtZSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnQ29tcGlsZSIs
ICgidG9vayAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIHdpdGggIiwg
cGF0aE5hbWUpKTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygp
KSkgewotICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwgY29kZUJsb2NrTmFtZSwgIiB1c2lu
ZyAiLCBtX21vZGUsICIgd2l0aCAiLCBwYXRoTmFtZSwgIiBpbnRvICIsIG1fZmluYWxpemVyID8g
bV9maW5hbGl6ZXItPmNvZGVTaXplKCkgOiAwLCAiIGJ5dGVzIGluICIsIChhZnRlciAtIGJlZm9y
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKLSAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCAobV90aW1lQmVmb3JlRlRMIC0gYmVmb3Jl
KS5taWxsaXNlY29uZHMoKSwgIiwgQjM6ICIsIChhZnRlciAtIG1fdGltZUJlZm9yZUZUTCkubWls
bGlzZWNvbmRzKCksICIpIik7Ci0gICAgICAgIGRhdGFMb2coIi5cbiIpOwotICAgIH0KK3ZvaWQg
UGxhbjo6Y2FuY2VsKCkKK3sKKyAgICBCYXNlOjpjYW5jZWwoKTsKKyAgICBtX3Byb2ZpbGVkREZH
Q29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKKyAg
ICBtX2NvbXBpbGF0aW9uID0gbnVsbHB0cjsKKyAgICBtX2ZpbmFsaXplciA9IG51bGxwdHI7Cisg
ICAgbV9pbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKKyAgICBtX3dhdGNocG9pbnRzID0gRGVz
aXJlZFdhdGNocG9pbnRzKCk7CisgICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVy
cygpOworICAgIG1fd2Vha1JlZmVyZW5jZXMgPSBEZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKKyAg
ICBtX3RyYW5zaXRpb25zID0gRGVzaXJlZFRyYW5zaXRpb25zKCk7CisgICAgbV9jYWxsYmFjayA9
IG51bGxwdHI7CiB9CiAKIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJl
YWRJbXBsKCkKQEAgLTMwMCw3ICsyNDMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyZWFkSW1wbCgpCiAgICAgCiAgICAgUlVOX1BIQVNFKHBlcmZvcm1TdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb24pOwogCi0gICAgaWYgKG1fbW9kZSA9PSBGVExGb3JPU1JF
bnRyeU1vZGUpIHsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9y
T1NSRW50cnkpIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBwZXJmb3JtT1NSRW50cnlwb2ludENy
ZWF0aW9uKGRmZyk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBtX2ZpbmFs
aXplciA9IG1ha2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CkBAIC0zNzYsNyArMzE5
LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQog
ICAgIH0KIAogICAgIHN3aXRjaCAobV9tb2RlKSB7Ci0gICAgY2FzZSBERkdNb2RlOiB7CisgICAg
Y2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRzogewogICAgICAgICBkZmcubV9maXhwb2ludFN0
YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1UaWVy
VXBDaGVja0luamVjdGlvbik7CkBAIC00MDUsOCArMzQ4LDggQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQogICAgICAgICByZXR1cm4gREZHUGF0aDsK
ICAgICB9CiAgICAgCi0gICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlN
b2RlOiB7CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAgICBjYXNlIEpJVENv
bXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6IHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAg
ICAgICAgaWYgKEZUTDo6Y2FuQ29tcGlsZShkZmcpID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgewog
ICAgICAgICAgICAgbV9maW5hbGl6ZXIgPSBtYWtlVW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oKnRo
aXMpOwpAQCAtNTgxLDIzICs1MjQsMTIgQEAgdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29tbW9uRGF0
YSogY29tbW9uRGF0YSkKICAgICB9CiB9CiAKLXZvaWQgUGxhbjo6bm90aWZ5Q29tcGlsaW5nKCkK
LXsKLSAgICBtX3N0YWdlID0gQ29tcGlsaW5nOwotfQotCi12b2lkIFBsYW46Om5vdGlmeVJlYWR5
KCkKLXsKLSAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9u
b3VzbHkobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwotICAgIG1fc3RhZ2Ug
PSBSZWFkeTsKLX0KLQogYm9vbCBQbGFuOjppc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKQogewog
ICAgIHJldHVybiBtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWRPbk1haW5UaHJlYWQoKm1fdm0s
IG1faWRlbnRpZmllcnMpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdp
dGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCitDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6
ZSgpCiB7CiAgICAgLy8gV2UgcGVyZm9ybSBtdWx0aXBsZSBzdG9yZXMgYmVmb3JlIGVtaXR0aW5n
IGEgd3JpdGUtYmFycmllci4gVG8gZW5zdXJlIHRoYXQgbm8gR0MgaGFwcGVucyBiZXR3ZWVuIHN0
b3JlIGFuZCB3cml0ZS1iYXJyaWVyLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQKICAgICAvLyBHQyBp
cyBkZWZlcnJlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgpAQCAtNjU0LDI0ICs1ODYs
MzAgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2Fs
bGJhY2soKQogCiAgICAgLy8gV2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0
aGUgY29kZSBibG9jayB0byB0aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KICAgICBtX3Zt
LT5oZWFwLndyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisKKyAgICBtX2NhbGxiYWNrLT5jb21w
aWxhdGlvbkRpZENvbXBsZXRlKG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrLCBy
ZXN1bHQpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbGFuOjpmaW5hbGl6ZUFu
ZE5vdGlmeUNhbGxiYWNrKCkKK2Jvb2wgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0
cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKENvZGVCbG9jayop
PiYgZnVuYykKIHsKLSAgICBtX2NhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKG1fY29k
ZUJsb2NrLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdD
YWxsYmFjaygpKTsKLX0KKyAgICBpZiAoIUJhc2U6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0Modmlz
aXRvciwgZnVuYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotQ29tcGlsYXRpb25LZXkgUGxh
bjo6a2V5KCkKLXsKLSAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCksIG1fbW9kZSk7CisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFs
dWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0
IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAor
ICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorICAg
IGZ1bmMobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChtX3Byb2ZpbGVkREZH
Q29kZUJsb2NrKQorICAgICAgICBmdW5jKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBQbGFuOjpj
aGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBQbGFu
OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewotICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIUJhc2U6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjbGVhbk11c3RIYW5kbGVW
YWx1ZXNJZk5lY2Vzc2FyeSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7IGktLTspIHsKQEAgLTY4Myw3ICs2MjEsNiBAQCB2b2lkIFBsYW46OmNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgbV9yZWNvcmRl
ZFN0YXR1c2VzLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
bV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9jb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOwogICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9wcm9maWxl
ZERGR0NvZGVCbG9jayk7CiAKQEAgLTY5NiwyMyArNjMzLDEyIEBAIHZvaWQgUGxhbjo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKIAogICAgIG1fd2Vha1Jl
ZmVyZW5jZXMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICBtX3RyYW5zaXRpb25zLnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlIHZvaWQg
UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYp
OwotdGVtcGxhdGUgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOwotCi12b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCi17Ci0gICAgQVNTRVJUKG1f
dm0pOwotICAgIG1fcmVjb3JkZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygqbV92
bSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci1ib29sIFBsYW46OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1f
c3RhZ2UgPT0gQ2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2aXNp
dG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCFC
YXNlOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghdmlzaXRvci5pc01hcmtlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcyMSwxNCArNjQ3LDkgQEAgYm9vbCBQbGFu
Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNpdG9yKQogICAgIHJldHVybiB0
cnVlOwogfQogCi10ZW1wbGF0ZSBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKLQogYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkKIHsKLSAgICBpZiAobV9zdGFnZSA9PSBDYW5jZWxsZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpKSkKKyAgICBpZiAoIUJhc2U6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV92bS0+aGVhcC5pc01hcmtlZChtX2NvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTczNywyNiAr
NjU4LDYgQEAgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBQbGFuOjpjYW5jZWwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3RhZ2UgIT0gQ2FuY2VsbGVkKTsKLSAgICBBU1NFUlQobV92bSk7Ci0gICAgbV92bSA9IG51bGxw
dHI7Ci0KLSAgICBtX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9wcm9maWxlZERGR0NvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgbV9tdXN0SGFuZGxlVmFsdWVzLmNsZWFyKCk7Ci0gICAgbV9j
b21waWxhdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9maW5hbGl6ZXIgPSBudWxscHRyOwotICAgIG1f
aW5saW5lQ2FsbEZyYW1lcyA9IG51bGxwdHI7Ci0gICAgbV93YXRjaHBvaW50cyA9IERlc2lyZWRX
YXRjaHBvaW50cygpOwotICAgIG1faWRlbnRpZmllcnMgPSBEZXNpcmVkSWRlbnRpZmllcnMoKTsK
LSAgICBtX3dlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgbV90
cmFuc2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOwotICAgIG1fY2FsbGJhY2sgPSBudWxs
cHRyOwotICAgIG1fc3RhZ2UgPSBDYW5jZWxsZWQ7Ci19Ci0KIHZvaWQgUGxhbjo6Y2xlYW5NdXN0
SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKQogewogICAgIExvY2tlciBsb2NrZXIgeyBtX211c3RI
YW5kbGVWYWx1ZUNsZWFuaW5nTG9jayB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApp
bmRleCBkZmM3OTY2ZTA2OWI0NTM0YTUzMjkwNjMyOTMxNGYyNjE5YWIyZDY4Li5hNTY4N2I2NjJh
Mzk4ZDEwMDgxODFjMmQ3YzAwMmFiMDhmNzBmNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaApAQCAtMjYsOCArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb21w
aWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uS2V5LmgiCi0jaW5jbHVk
ZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnRpZXMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJE
RkdEZXNpcmVkVHJhbnNpdGlvbnMuaCIKQEAgLTM1LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKICNpbmNs
dWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJKSVRQbGFuLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgpAQCAtNTIsNDUgKzUxLDM1IEBAIGNsYXNz
IFRocmVhZERhdGE7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotY2xhc3MgUGxhbiA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CitjbGFzcyBQbGFuIGZpbmFsIDogcHVibGlj
IEpJVFBsYW4geworICAgIHVzaW5nIEJhc2UgPSBKSVRQbGFuOworCiBwdWJsaWM6CiAgICAgUGxh
bigKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tUb0NvbXBpbGUsIENvZGVCbG9jayogcHJv
ZmlsZWRERkdDb2RlQmxvY2ssCi0gICAgICAgIENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRl
eCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIEpJVENvbXBpbGF0aW9uTW9kZSwgQnl0
ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRz
PE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKIAot
ICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqKTsKLSAgICAKLSAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpOwotICAgIHZvaWQg
ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwotICAgIAotICAgIHZvaWQgbm90aWZ5Q29tcGls
aW5nKCk7Ci0gICAgdm9pZCBub3RpZnlSZWFkeSgpOwotICAgIAotICAgIENvbXBpbGF0aW9uS2V5
IGtleSgpOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0
b3I+Ci0gICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBjb25zdCBGdW5j
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4g
Ym9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3du
VG9CZUxpdmVBZnRlckdDKCk7Ci0gICAgdm9pZCBmaW5hbGl6ZUluR0MoKTsKLSAgICB2b2lkIGNh
bmNlbCgpOworICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZmlu
YWxpemVJbkdDKCkgZmluYWw7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoKSBvdmVy
cmlkZTsKIAotICAgIGJvb2wgY2FuVGllclVwQW5kT1NSRW50ZXIoKSBjb25zdCB7IHJldHVybiAh
bV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2Rlcy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIG5vdGlm
eVJlYWR5KCkgZmluYWw7CisgICAgdm9pZCBjYW5jZWwoKSBmaW5hbDsKIAotICAgIHZvaWQgY2xl
YW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2
ZUFmdGVyR0MoKSBmaW5hbDsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImKSBmaW5hbDsKKyAgICBib29sIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0Mo
QWJzdHJhY3RTbG90VmlzaXRvciYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+Jikg
ZmluYWw7CisgICAgYm9vbCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJikgZmluYWw7CiAKLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Cisg
ICAgYm9vbCBjYW5UaWVyVXBBbmRPU1JFbnRlcigpIGNvbnN0IHsgcmV0dXJuICFtX3RpZXJVcEFu
ZE9TUkVudGVyQnl0ZWNvZGVzLmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBjbGVhbk11c3RIYW5k
bGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgYm9vbCBpc0ZUTCgpIGNvbnN0IHsgcmV0dXJu
IERGRzo6aXNGVEwobV9tb2RlKTsgfQotICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CiAgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsgfQogICAgIGNvbnN0
IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbXVzdEhhbmRsZVZhbHVlczsgfQotICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEo
KSBjb25zdCB7IHJldHVybiBtX3RocmVhZERhdGE7IH0KICAgICBQcm9maWxlcjo6Q29tcGlsYXRp
b24qIGNvbXBpbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlvbi5nZXQoKTsgfQog
CiAgICAgRmluYWxpemVyKiBmaW5hbGl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsaXplci5n
ZXQoKTsgfQpAQCAtMTA5LDMyICs5OCwxNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxCeXRlY29k
ZUluZGV4LCBGaXhlZFZlY3RvcjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcEluTG9vcEhpZXJhcmNo
eSgpIHsgcmV0dXJuIG1fdGllclVwSW5Mb29wSGllcmFyY2h5OyB9CiAgICAgVmVjdG9yPEJ5dGVj
b2RlSW5kZXg+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KIAotICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENv
bXBpbGluZywgUmVhZHksIENhbmNlbGxlZCB9OwotICAgIFN0YWdlIHN0YWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFnZTsgfQotCiAgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKiBjYWxs
YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2suZ2V0KCk7IH0KICAgICB2b2lkIHNldENh
bGxiYWNrKFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spIHsgbV9j
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7Ci0gICAgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKSBj
b25zdDsKLSAgICAKLSAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRo
LCBGVExQYXRoLCBDYW5jZWxQYXRoIH07Ci0gICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRo
cmVhZEltcGwoKTsKKyAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbCgpIG92
ZXJyaWRlOwogICAgIAogICAgIGJvb2wgaXNTdGlsbFZhbGlkT25NYWluVGhyZWFkKCk7CiAgICAg
Ym9vbCBpc1N0aWxsVmFsaWQoKTsKICAgICB2b2lkIHJlYWxseUFkZChDb21tb25EYXRhKik7CiAK
LSAgICAvLyBXYXJuaW5nOiBwcmV0dHkgbXVjaCBhbGwgb2YgdGhlIHBvaW50ZXIgZmllbGRzIGlu
IHRoaXMgb2JqZWN0IGdldCBudWxsZWQgYnkgY2FuY2VsKCkuIFNvLCBpZgotICAgIC8vIHlvdSdy
ZSB3cml0aW5nIGNvZGUgdGhhdCBpcyBjYWxsYWJsZSBvbiB0aGUgY2FuY2VsIHBhdGgsIGJlIHN1
cmUgdG8gbnVsbCBjaGVjayBldmVyeXRoaW5nIQotCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1fbW9k
ZTsKLQotICAgIFZNKiBtX3ZtOwotCiAgICAgLy8gVGhlc2UgY2FuIGJlIHJhdyBwb2ludGVycyBi
ZWNhdXNlIHdlIHZpc2l0IHRoZW0gZHVyaW5nIGV2ZXJ5IEdDIGluIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuLgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrOwogCiAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+IG1fbXVzdEhhbmRsZVZhbHVlczsKQEAgLTE0NSw4ICsxMTksNiBAQCBwcml2YXRlOgogCiAg
ICAgY29uc3QgQnl0ZWNvZGVJbmRleCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgIFRo
cmVhZERhdGEqIG1fdGhyZWFkRGF0YTsKLQogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRp
b24+IG1fY29tcGlsYXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmluYWxpemVyPiBtX2Zp
bmFsaXplcjsKQEAgLTE2MSwxMSArMTMzLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEJ5dGVj
b2RlSW5kZXgsIEZpeGVkVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJh
cmNoeTsKICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVj
b2RlczsKIAotICAgIFN0YWdlIG1fc3RhZ2U7Ci0KICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotCi0gICAgTW9ub3RvbmljVGltZSBtX3RpbWVCZWZv
cmVGVEw7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW5JbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyNzg4MmRhYTU5ZjZhYTU4MTcyYTlkMjg3OWJkNzg0M2NmMmY5NzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuSW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlw
ZW5hbWUgVmlzaXRvcj4KLXZvaWQgUGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9y
JiB2aXNpdG9yLCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0ModmlzaXRvcikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBDb21waWxh
dGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3Jt
aW5nCi0gICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2lt
aXN0aWMgYW5kIGFzc3VtZSB0aGF0Ci0gICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUg
dmlzaXRlZCBkdXJpbmcgR0MuCi0KLSAgICBmdW5jKG1fY29kZUJsb2NrKTsKLSAgICBmdW5jKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAobV9wcm9maWxlZERGR0NvZGVCbG9j
aykKLSAgICAgICAgZnVuYyhtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKTsKLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTk0MDcwNjE2M2Q2YTNjYmI2MmQyZjMxYzRiZWZlMTIzYjdmNjM5Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKLQotI2lmIEVOQUJM
RShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUgIkRGR1NjYW5uYWJs
ZS5oIgotI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi1TYWZlcG9pbnQ6OlJlc3VsdDo6flJlc3VsdCgpCi17Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV93YXNDaGVja2VkKTsKLX0KLQotYm9vbCBTYWZlcG9pbnQ6OlJlc3VsdDo6ZGlk
R2V0Q2FuY2VsbGVkKCkKLXsKLSAgICBtX3dhc0NoZWNrZWQgPSB0cnVlOwotICAgIHJldHVybiBt
X2RpZEdldENhbmNlbGxlZDsKLX0KLQotU2FmZXBvaW50OjpTYWZlcG9pbnQoUGxhbiYgcGxhbiwg
UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX3ZtKHBsYW4udm0oKSkKLSAgICAsIG1fcGxhbihwbGFu
KQotICAgICwgbV9kaWRDYWxsQmVnaW4oZmFsc2UpCi0gICAgLCBtX3Jlc3VsdChyZXN1bHQpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7Ci0gICAgcmVzdWx0Lm1f
d2FzQ2hlY2tlZCA9IGZhbHNlOwotICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IGZhbHNl
OwotfQotCi1TYWZlcG9pbnQ6On5TYWZlcG9pbnQoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZGlkQ2FsbEJlZ2luKTsKLSAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxhbi50aHJlYWRE
YXRhKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+bV9zYWZlcG9pbnQgPT0gdGhp
cyk7Ci0gICAgICAgIGRhdGEtPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci0gICAgICAgIGRhdGEtPm1f
c2FmZXBvaW50ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgU2FmZXBvaW50OjphZGQoU2Nh
bm5hYmxlKiBzY2FubmFibGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2lu
KTsKLSAgICBtX3NjYW5uYWJsZXMuYXBwZW5kKHNjYW5uYWJsZSk7Ci19Ci0KLXZvaWQgU2FmZXBv
aW50OjpiZWdpbigpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKLSAg
ICBtX2RpZENhbGxCZWdpbiA9IHRydWU7Ci0gICAgaWYgKFRocmVhZERhdGEqIGRhdGEgPSBtX3Bs
YW4udGhyZWFkRGF0YSgpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5tX3NhZmVw
b2ludCk7Ci0gICAgICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gdGhpczsKLSAgICAgICAgZGF0YS0+
bV9yaWdodFRvUnVuLnVubG9ja0ZhaXJseSgpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVmlzaXRvcj4KLXZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2lu
KTsKLQotICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJu
OyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEKLSAgICAKLSAgICBp
ZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKLSAg
ICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCi10ZW1w
bGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci1ib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7Ci0gICAgCi0gICAg
aWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
V2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNz
IHdpdGggaXQgdGhpcyB0aW1lIGFyb3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9u
LgotICAgIAotICAgIHJldHVybiBtX3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRv
cik7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdH
QyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZpc2l0b3ImKTsKLQotYm9vbCBTYWZlcG9pbnQ6OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2lu
KTsKLSAgICAKLSAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCi0gICAgICAgIHJl
dHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28g
bGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxp
dmUgYW5kIG1vdmUgb24uCi0gICAgCi0gICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVB
ZnRlckdDKCk7Ci19Ci0KLXZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXN1bHQubV9k
aWRHZXRDYW5jZWxsZWQpOyAvLyBXZSBjYW5ub3QgZ2V0IGNhbmNlbGxlZCB0d2ljZSBiZWNhdXNl
IHN1YnNlcXVlbnQgR0NzIHdpbGwgdGhpbmsgdGhhdCB3ZSdyZSBhbGl2ZSBhbmQgdGhleSB3aWxs
IG5vdCBkbyBhbnl0aGluZyB0byB1cy4KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4u
c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpOwotICAgIG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2Vs
bGVkID0gdHJ1ZTsKLSAgICBtX3ZtID0gbnVsbHB0cjsKLX0KLQotVk0qIFNhZmVwb2ludDo6dm0o
KSBjb25zdAotewotICAgIHJldHVybiBtX3ZtOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMzk4MTY0
OTg5ZGExYWQwYjU3OTZjNjk5ZTFjOGNjZjNhYzZkMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgVk07Ci0KLW5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBQbGFuOwotY2xhc3Mg
U2Nhbm5hYmxlOwotCi1jbGFzcyBTYWZlcG9pbnQgewotcHVibGljOgotICAgIGNsYXNzIFJlc3Vs
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXN1bHQoKQotICAgICAgICAgICAgOiBtX2RpZEdl
dENhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV93YXNDaGVja2VkKHRydWUpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgflJlc3VsdCgpOwotICAgICAgICAK
LSAgICAgICAgYm9vbCBkaWRHZXRDYW5jZWxsZWQoKTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wg
bV9kaWRHZXRDYW5jZWxsZWQ7Ci0gICAgICAgIGJvb2wgbV93YXNDaGVja2VkOwotICAgIH07Ci0g
ICAgCi0gICAgU2FmZXBvaW50KFBsYW4mLCBSZXN1bHQmKTsKLSAgICB+U2FmZXBvaW50KCk7Ci0g
ICAgCi0gICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7Ci0gICAgCi0gICAgdm9pZCBiZWdpbigpOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihWaXNpdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gYm9v
bCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0tub3duVG9C
ZUxpdmVBZnRlckdDKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICAKLSAgICBWTSogdm0oKSBj
b25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgotCi1wcml2
YXRlOgotICAgIFZNKiBtX3ZtOwotICAgIFBsYW4mIG1fcGxhbjsKLSAgICBWZWN0b3I8U2Nhbm5h
YmxlKj4gbV9zY2FubmFibGVzOwotICAgIGJvb2wgbV9kaWRDYWxsQmVnaW47Ci0gICAgUmVzdWx0
JiBtX3Jlc3VsdDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY2FubmFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTA3MmI1YjU4ZmJmNDAzMjcwNDRjZWE3
NTY1M2JlZDI0OTc2MDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKLWNsYXNzIFNsb3RW
aXNpdG9yOwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgU2Nhbm5hYmxlIHsKLXB1YmxpYzoK
LSAgICBTY2FubmFibGUoKSB7IH0KLSAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7Ci19OwotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZjAzMmViN2UzYzg5NzIzNTI2NWE5M2JjYjMzYzlkYjg5NjI3MDEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCi0KLSNpZiBF
TkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1UaHJl
YWREYXRhOjpUaHJlYWREYXRhKFdvcmtsaXN0KiB3b3JrbGlzdCkKLSAgICA6IG1fd29ya2xpc3Qo
d29ya2xpc3QpCi0gICAgLCBtX3NhZmVwb2ludChudWxscHRyKQotewotfQotCi1UaHJlYWREYXRh
Ojp+VGhyZWFkRGF0YSgpCi17Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RocmVhZERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhy
ZWFkRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJiN2QyYjdjMzYxZThi
OWQzODBjNzI4Y2ZiOGEwNWIxNzQ2OWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBTYWZl
cG9pbnQ7Ci1jbGFzcyBXb3JrbGlzdDsKLQotY2xhc3MgVGhyZWFkRGF0YSB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVGhyZWFkRGF0YShXb3JrbGlzdCopOwot
ICAgIH5UaHJlYWREYXRhKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTYWZl
cG9pbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFdvcmtsaXN0OwotICAgIAotICAgIFdvcmtsaXN0KiBt
X3dvcmtsaXN0OwotICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwotICAgIFVu
Y2hlY2tlZExvY2sgbV9yaWdodFRvUnVuOwotICAgIFNhZmVwb2ludCogbV9zYWZlcG9pbnQ7Ci19
OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IGIzYTMwMzgxNGJhOTY1NTFjYmFhZmY3ZjVhMjMw
MjI4YzkxMjc0YTkuLjhmZDAyZjNiZDM5NDE5ZTgzM2UyN2FhOWExOTc2NTc4NDQ5ZTdhNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFu
Lm1vZGUoKSA9PSBERkdNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3Bs
YW4ubW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKTsKIAogICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDE1N2FkZjg3NmRjODQ2ODNhODZjMDQ2ZWEyYmVlY2JhYjk5YTkzNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCi0KLSNpbmNsdWRlICJERkdT
YWZlcG9pbnQuaCIKLSNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgotI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKLSNpbmNsdWRlIDxtdXRl
eD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLWNsYXNzIFdvcmtsaXN0
OjpUaHJlYWRCb2R5IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7Ci1wdWJsaWM6Ci0g
ICAgVGhyZWFkQm9keShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29y
a2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxVbmNoZWNrZWRMb2NrPiBsb2NrLCBSZWY8QXV0
b21hdGljVGhyZWFkQ29uZGl0aW9uPiYmIGNvbmRpdGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkp
Ci0gICAgICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwgbG9jaywgV1RGTW92ZShjb25kaXRp
b24pLCBUaHJlYWRUeXBlOjpDb21waWxlcikKLSAgICAgICAgLCBtX3dvcmtsaXN0KHdvcmtsaXN0
KQotICAgICAgICAsIG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fcmVsYXRpdmVQcmlvcml0eShy
ZWxhdGl2ZVByaW9yaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBuYW1lKCkg
Y29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dvcmtsaXN0Lm1fdGhyZWFkTmFt
ZS5kYXRhKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBvbGxSZXN1bHQgcG9sbChjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKG1fd29ya2xp
c3QubV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2Fp
dDsKLSAgICAgICAgCi0gICAgICAgIG1fcGxhbiA9IG1fd29ya2xpc3QubV9xdWV1ZS50YWtlRmly
c3QoKTsKLSAgICAgICAgaWYgKCFtX3BsYW4pIHsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrbGlzdC5k
dW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCI6
IFRocmVhZCBzaHV0dGluZyBkb3duXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpTdG9wOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpQcmVwYXJpbmcpOwotICAgICAgICBtX3dvcmtsaXN0
Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7Ci0gICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpX
b3JrOwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBXb3JrU2NvcGU7Ci0gICAgZnJpZW5kIGNsYXNz
IFdvcmtTY29wZTsKLSAgICBjbGFzcyBXb3JrU2NvcGUgZmluYWwgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgV29ya1Njb3BlKFRocmVhZEJvZHkmIHRocmVhZCkKLSAgICAgICAgICAgIDogbV90aHJl
YWQodGhyZWFkKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVh
ZC5tX3BsYW4pOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV90aHJlYWQubV93b3JrbGlz
dC5tX251bWJlck9mQWN0aXZlVGhyZWFkcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IH5Xb3JrU2NvcGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
dGhyZWFkLm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgICAgICBtX3RocmVhZC5tX3BsYW4g
PSBudWxscHRyOwotICAgICAgICAgICAgbV90aHJlYWQubV93b3JrbGlzdC5tX251bWJlck9mQWN0
aXZlVGhyZWFkcy0tOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IFRocmVhZEJvZHkmIG1fdGhyZWFkOwotICAgIH07Ci0gICAgCi0gICAgV29ya1Jlc3VsdCB3b3Jr
KCkgZmluYWwKLSAgICB7Ci0gICAgICAgIFdvcmtTY29wZSB3b3JrU2NvcGUoKnRoaXMpOwotCi0g
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2RhdGEubV9yaWdodFRvUnVuIH07Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV93b3JrbGlzdC5tX2xvY2sgfTsKLSAgICAg
ICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVkKQotICAgICAgICAg
ICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAgICAgIG1fcGxhbi0+
bm90aWZ5Q29tcGlsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksIG1fd29ya2xpc3QsICI6IENv
bXBpbGluZyAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5Iik7Ci0gICAgICAgIAot
ICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNhZmVwb2ludGluZyBz
aW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQg
YnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZCgm
bV9kYXRhKTsKLSAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpDYW5jZWxsZWQp
IHsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSkg
ewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBh
cmUhICgyKVxuIik7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgewotICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICAgICAg
aWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X3BsYW4tPm5vdGlmeVJlYWR5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3Jr
bGlzdC5kdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCI6IENvbXBpbGVkICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9wbGFuLT52bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpOwotICAgICAgICAgICAgbV93b3Jr
bGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7Ci0gICAgICAgICAgICBt
X3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdGhyZWFkRGlkU3RhcnQoKSBmaW5hbAotICAgIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFk
IHN0YXJ0ZWQiKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3JlbGF0aXZlUHJpb3JpdHkpCi0g
ICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJp
b3JpdHkpOwotICAgICAgICAKLSAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gbWFrZVVuaXF1
ZTxDb21waWxhdGlvblNjb3BlPigpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRocmVhZElzU3Rv
cHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gV2Un
cmUgaG9sZGluZyB0aGUgV29ya2xpc3Q6Om1fbG9jaywgc28gd2Ugc2hvdWxkIGJlIGNhcmVmdWwg
bm90IHRvIGRlYWRsb2NrLgotICAgICAgICAKLSAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFkIHdpbGwgc3Rv
cCIpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFtX3BsYW4pOwotICAgICAgICAKLSAgICAg
ICAgbV9jb21waWxhdGlvblNjb3BlID0gbnVsbHB0cjsKLSAgICAgICAgbV9wbGFuID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBXb3JrbGlzdCYgbV93b3JrbGlzdDsKLSAgICBUaHJlYWREYXRhJiBt
X2RhdGE7Ci0gICAgaW50IG1fcmVsYXRpdmVQcmlvcml0eTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q29tcGlsYXRpb25TY29wZT4gbV9jb21waWxhdGlvblNjb3BlOwotICAgIFJlZlB0cjxQbGFuPiBt
X3BsYW47Ci19OwotCi1zdGF0aWMgQ1N0cmluZyBjcmVhdGVXb3JrbGlzdE5hbWUoQ1N0cmluZyYm
IHRpZXJOYW1lKQotewotI2lmIE9TKExJTlVYKQotICAgIHJldHVybiB0b0NTdHJpbmcoV1RGTW92
ZSh0aWVyTmFtZSksICJXb3JrZXIiKTsKLSNlbHNlCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhXVEZN
b3ZlKHRpZXJOYW1lKSwgIiBXb3JrbGlzdCBXb3JrZXIgVGhyZWFkIik7Ci0jZW5kaWYKLX0KLQot
V29ya2xpc3Q6OldvcmtsaXN0KENTdHJpbmcmJiB0aWVyTmFtZSkKLSAgICA6IG1fdGhyZWFkTmFt
ZShjcmVhdGVXb3JrbGlzdE5hbWUoV1RGTW92ZSh0aWVyTmFtZSkpKQotICAgICwgbV9wbGFuRW5x
dWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKLSAgICAsIG1fbG9jayhC
b3g8VW5jaGVja2VkTG9jaz46OmNyZWF0ZSgpKQotewotfQotCi1Xb3JrbGlzdDo6fldvcmtsaXN0
KCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBt
X3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0byBpbmRpY2F0ZSB0aGF0
IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgICAgIG1fcGxhbkVucXVldWVk
LT5ub3RpZnlBbGwobG9ja2VyKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJl
YWRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVhZC0+am9pbigp
OwotICAgIEFTU0VSVCghbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOwotfQotCi12b2lkIFdvcmts
aXN0OjpmaW5pc2hDcmVhdGlvbih1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2
ZVByaW9yaXR5KQotewotICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVGhyZWFkcyk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJP
ZlRocmVhZHM7IGktLTspIHsKLSAgICAgICAgY3JlYXRlTmV3VGhyZWFkKGxvY2tlciwgcmVsYXRp
dmVQcmlvcml0eSk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpjcmVhdGVOZXdUaHJlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCi17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZERhdGE+IGRhdGEgPSBtYWtlVW5pcXVlPFRocmVhZERh
dGE+KHRoaXMpOwotICAgIGRhdGEtPm1fdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZEJvZHko
bG9ja2VyLCAqdGhpcywgKmRhdGEsIG1fbG9jaywgbV9wbGFuRW5xdWV1ZWQuY29weVJlZigpLCBy
ZWxhdGl2ZVByaW9yaXR5KSk7Ci0gICAgbV90aHJlYWRzLmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsK
LX0KLQotUmVmPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3JlYXRlKENTdHJpbmcmJiB0aWVyTmFtZSwg
dW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKLXsKLSAgICBS
ZWY8V29ya2xpc3Q+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgV29ya2xpc3QoV1RGTW92ZSh0aWVy
TmFtZSkpKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKG51bWJlck9mVGhyZWFkcywgcmVs
YXRpdmVQcmlvcml0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBXb3JrbGlzdDo6
aXNBY3RpdmVGb3JWTShWTSYgdm0pIGNvbnN0Ci17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xv
Y2sgfTsKLSAgICBQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOwot
ICAgIGZvciAoUGxhbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnZtKCkgPT0g
JnZtKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4mJiBwbGFuKQotewotICAgIExv
Y2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxh
dGlvblF1ZXVlKCkpIHsKLSAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0g
ICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXplICIsIHBsYW4tPmtl
eSgpLCAiXG4iKTsKLSAgICB9Ci0gICAgQVNTRVJUKG1fcGxhbnMuZmluZChwbGFuLT5rZXkoKSkg
PT0gbV9wbGFucy5lbmQoKSk7Ci0gICAgbV9wbGFucy5hZGQocGxhbi0+a2V5KCksIHBsYW4uY29w
eVJlZigpKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICBtX3BsYW5F
bnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7Ci19Ci0KLVdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlz
dDo6Y29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSBrZXkpCi17Ci0gICAgTG9ja2VyIGxv
Y2tlciB7ICptX2xvY2sgfTsKLSAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IE5vdEtub3duOwotICAgIHJldHVybiBpdGVyLT52YWx1ZS0+c3RhZ2UoKSA9PSBQbGFuOjpSZWFk
eSA/IENvbXBpbGVkIDogQ29tcGlsaW5nOwotfQotCi12b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxB
bGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mIHZtKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKLSAgICAKLSAgICAvLyBXaGlsZSB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIGNvbXBpbGVy
IHRvIGZpbmlzaCwgdGhlIGNvbGxlY3RvciBtaWdodCBoYXZlIGFscmVhZHkgc3VzcGVuZGVkCi0g
ICAgLy8gdGhlIGNvbXBpbGVyIGFuZCB0aGVuIGl0IHdpbGwgYmUgd2FpdGluZyBmb3IgdXMgdG8g
c3RvcC4gVGhhdCdzIGEgZGVhZGxvY2suIFdlIGF2b2lkIHRoYXQKLSAgICAvLyBkZWFkbG9jayBi
eSByZWxpbnF1aXNoaW5nIG91ciBoZWFwIGFjY2Vzcywgc28gdGhhdCB0aGUgY29sbGVjdG9yIHBy
ZXRlbmRzIHRoYXQgd2UgYXJlIHN0b3BwZWQKLSAgICAvLyBldmVuIGlmIHdlIGFyZW4ndC4KLSAg
ICBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlIHJlbGVhc2VIZWFwQWNjZXNzU2NvcGUodm0uaGVhcCk7
Ci0gICAgCi0gICAgLy8gV2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZN
IHRvIGNvbXBsZXRlLiBUaGUgaWRlYSBoZXJlCi0gICAgLy8gaXMgdGhhdCB3ZSB3YW50IGFsbCBv
ZiB0aGUgY2FsbGVyIFZNJ3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3QgY2FyZQotICAgIC8v
IGFib3V0IGFueSBvdGhlciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0ZW1wdCB0byB3YWl0
IG9uIHRob3NlLgotICAgIC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRo
YXQgYWx0aG91Z2ggb3RoZXIgVk1zIG1heSBzdGlsbAotICAgIC8vIGJlIGFkZGluZyBwbGFucywg
b3VyIFZNIHdpbGwgbm90IGJlLgotICAgIAotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07
Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAg
ICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgIGRhdGFMb2coIjog
V2FpdGluZyBmb3IgYWxsIGluIFZNIHRvIGNvbXBsZXRlLlxuIik7Ci0gICAgfQotICAgIAotICAg
IGZvciAoOzspIHsKLSAgICAgICAgYm9vbCBhbGxBcmVDb21waWxlZCA9IHRydWU7Ci0gICAgICAg
IFBsYW5NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGxh
bk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52bSgpICE9ICZ2bSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UoKSAh
PSBQbGFuOjpSZWFkeSkgewotICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBpbGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhbGxBcmVDb21waWxlZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAKLSAgICAgICAgbV9wbGFuQ29tcGlsZWQud2FpdCgqbV9sb2NrKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxS
ZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFBs
YW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07Ci0gICAgICAgIGlmIChwbGFuLT52bSgpICE9ICZ2
bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBQ
bGFuOjpSZWFkeSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBteVJlYWR5UGxhbnMu
YXBwZW5kKHBsYW4pOwotICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5s
YXN0KCk7Ci0gICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fcGxh
bnMucmVtb3ZlKHBsYW4tPmtleSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbW92
ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0pCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwg
OD4gbXlSZWFkeVBsYW5zOwotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFk
eVBsYW5zKTsKLX0KLQotV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5
UGxhbnNGb3JWTShWTSYgdm0sIENvbXBpbGF0aW9uS2V5IHJlcXVlc3RlZEtleSkKLXsKLSAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4gbXlS
ZWFkeVBsYW5zOwotICAgIAotICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFk
eVBsYW5zKTsKLSAgICAKLSAgICBTdGF0ZSByZXN1bHRpbmdTdGF0ZSA9IE5vdEtub3duOwotCi0g
ICAgd2hpbGUgKCFteVJlYWR5UGxhbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gbXlSZWFkeVBsYW5zLnRha2VMYXN0KCk7Ci0gICAgICAgIENvbXBpbGF0aW9uS2V5
IGN1cnJlbnRLZXkgPSBwbGFuLT5rZXkoKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksICp0aGlzLCAiOiBDb21wbGV0aW5n
ICIsIGN1cnJlbnRLZXkpOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkg
PT0gUGxhbjo6UmVhZHkpOwotCi0gICAgICAgIHBsYW4tPmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJh
Y2soKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50S2V5ID09IHJlcXVlc3RlZEtleSkK
LSAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29tcGlsZWQ7Ci0gICAgfQotICAgIAotICAg
IGlmICghIXJlcXVlc3RlZEtleSAmJiByZXN1bHRpbmdTdGF0ZSA9PSBOb3RLbm93bikgewotICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBpZiAobV9wbGFucy5jb250
YWlucyhyZXF1ZXN0ZWRLZXkpKQotICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxp
bmc7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHRpbmdTdGF0ZTsKLX0KLQotdm9pZCBX
b3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7Ci0gICAgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsK
LSAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6
OnN1c3BlbmRBbGxUaHJlYWRzKCkKLXsKLSAgICBtX3N1c3BlbnNpb25Mb2NrLmxvY2soKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX3Ro
cmVhZHNbaV0tPm1fcmlnaHRUb1J1bi5sb2NrKCk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlc3Vt
ZUFsbFRocmVhZHMoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7
IGktLTspCi0gICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLnVubG9jaygpOwotICAg
IG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+Ci12b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgVk0qIHZtID0gJnZpc2l0b3IuaGVhcCgpLT52bSgpOwotICAgIHsKLSAgICAgICAg
TG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICAg
ICAgaWYgKHBsYW4tPnZtKCkgIT0gdm0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwbGFuLT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVj
YXVzZToKLSAgICAvLyAoMSkgbm8gbmV3IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFk
cy4gSGVuY2UsIGl0IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3MuCi0gICAgLy8gKDIp
IFRocmVhZERhdGE6Om1fc2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1f
cmlnaHRUb1J1biB3aGljaCB3ZSBtdXN0IGJlCi0gICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNh
dXNlIG9mIGEgcHJpb3IgY2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgotICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgVGhyZWFkRGF0YSog
ZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKLSAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQg
PSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAgICAgaWYgKHNhZmVwb2ludCAmJiBzYWZlcG9pbnQt
PnZtKCkgPT0gdm0pCi0gICAgICAgICAgICBzYWZlcG9pbnQtPmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKHZpc2l0b3IpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgdm9pZCBXb3JrbGlzdDo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lk
IFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7Ci0KLXZvaWQgV29y
a2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCi17Ci0gICAgewotICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFk
UGxhbktleXM7Ci0gICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMu
YmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFBs
YW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChwbGFuLT52bSgp
ICE9ICZ2bSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwbGFu
LT5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpIHsKLSAgICAgICAgICAgICAgICBwbGFuLT5maW5h
bGl6ZUluR0MoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2VsbGVk
KTsgLy8gU2hvdWxkIG5vdCBiZSBjYW5jZWxsZWQsIHlldC4KLSAgICAgICAgICAgIEFTU0VSVCgh
ZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSk7Ci0gICAgICAgICAgICBkZWFkUGxh
bktleXMuYWRkKHBsYW4tPmtleSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRlYWRQbGFu
S2V5cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktl
eT46Oml0ZXJhdG9yIGl0ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxh
bktleXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBtX3BsYW5zLnRha2UoKml0ZXIp
LT5jYW5jZWwoKTsKLSAgICAgICAgICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVldWU7Ci0g
ICAgICAgICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICAgICAgICAg
IGlmIChwbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICAg
ICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9x
dWV1ZS5zd2FwKG5ld1F1ZXVlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9yZWFk
eVBsYW5zW2ldLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5
UGxhbnMubGFzdCgpOwotICAgICAgICAgICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm8gbG9ja2lu
ZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2VlIGNvbW1lbnQgaW4gdmlzaXRXZWFrUmVmZXJlbmNl
cygpLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKLSAgICAgICAgU2Fm
ZXBvaW50KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKLSAgICAgICAgaWYgKCFzYWZl
cG9pbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+dm0o
KSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNhZmVwb2ludC0+
aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHNhZmVwb2ludC0+Y2FuY2VsKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0OjpyZW1vdmVO
b25Db21waWxpbmdQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
bG9jayB9OwotICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKLSAgICBW
ZWN0b3I8UmVmUHRyPFBsYW4+PiBkZWFkUGxhbnM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cGxhbnMpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOwotICAgICAg
ICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q29tcGlsaW5nKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOwotICAgICAgICBkZWFk
UGxhbnMuYXBwZW5kKHBsYW4pOwotICAgIH0KLSAgICBmb3IgKENvbXBpbGF0aW9uS2V5IGtleSA6
IGRlYWRQbGFuS2V5cykKLSAgICAgICAgbV9wbGFucy5yZW1vdmUoa2V5KTsKLSAgICBEZXF1ZTxS
ZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwotICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAg
ICBpZiAoIWRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpCi0gICAgICAgICAgICBu
ZXdRdWV1ZS5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgfQotICAgIG1fcXVldWUgPSBXVEZN
b3ZlKG5ld1F1ZXVlKTsKLSAgICBtX3JlYWR5UGxhbnMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAg
ICAgIFsmXSAoUmVmUHRyPFBsYW4+JiBwbGFuKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVy
biBkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpOwotICAgICAgICB9KTsKLSAgICBm
b3IgKGF1dG8mIHBsYW4gOiBkZWFkUGxhbnMpCi0gICAgICAgIHBsYW4tPmNhbmNlbCgpOwotfQot
Ci1zaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
Km1fbG9jayB9OwotICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKLX0KLQotdm9pZCBXb3JrbGlz
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIExvY2tlciBsb2NrZXIgeyAq
bV9sb2NrIH07Ci0gICAgZHVtcChsb2NrZXIsIG91dCk7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OmR1
bXAoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAg
IG91dC5wcmludCgKLSAgICAgICAgIldvcmtsaXN0KCIsIFJhd1BvaW50ZXIodGhpcyksICIpW1F1
ZXVlIExlbmd0aCA9ICIsIG1fcXVldWUuc2l6ZSgpLAotICAgICAgICAiLCBNYXAgU2l6ZSA9ICIs
IG1fcGxhbnMuc2l6ZSgpLCAiLCBOdW0gUmVhZHkgPSAiLCBtX3JlYWR5UGxhbnMuc2l6ZSgpLAot
ICAgICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9mQWN0aXZlVGhyZWFk
cywgIi8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOwotfQotCi11bnNpZ25lZCBXb3JrbGlzdDo6
c2V0TnVtYmVyT2ZUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywgaW50IHJlbGF0aXZl
UHJpb3JpdHkpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fc3VzcGVuc2lvbkxvY2sgfTsKLSAg
ICBhdXRvIGN1cnJlbnROdW1iZXJPZlRocmVhZHMgPSBtX3RocmVhZHMuc2l6ZSgpOwotICAgIGlm
IChudW1iZXJPZlRocmVhZHMgPCBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBjdXJyZW50TnVtYmVyT2ZUaHJlYWRzOyBpLS0gPiBudW1iZXJPZlRocmVh
ZHM7KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdGhyZWFkc1tpXS0+bV90aHJlYWQtPmhhc1Vu
ZGVybHlpbmdUaHJlYWQobG9ja2VyKSkgewotICAgICAgICAgICAgICAgICAgICBtX3F1ZXVlLmFw
cGVuZChudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVh
ZC0+bm90aWZ5KGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnROdW1iZXJPZlRocmVhZHM7
IGktLSA+IG51bWJlck9mVGhyZWFkczspIHsKLSAgICAgICAgICAgIGJvb2wgaXNTdG9wcGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKLSAgICAgICAgICAgICAgICBpc1N0b3BwZWQgPSBtX3RocmVhZHNbaV0tPm1fdGhy
ZWFkLT50cnlTdG9wKGxvY2tlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWlz
U3RvcHBlZCkKLSAgICAgICAgICAgICAgICBtX3RocmVhZHNbaV0tPm1fdGhyZWFkLT5qb2luKCk7
Ci0gICAgICAgICAgICBtX3RocmVhZHMucmVtb3ZlKGkpOwotICAgICAgICB9Ci0gICAgICAgIG1f
dGhyZWFkcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBBU1NFUlQobV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMgPD0gbnVtYmVyT2ZUaHJlYWRzKTsKLSAgICB9IGVsc2UgaWYgKG51bWJlck9mVGhyZWFk
cyA+IGN1cnJlbnROdW1iZXJPZlRocmVhZHMpIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudE51bWJlck9mVGhyZWFk
czsgaSA8IG51bWJlck9mVGhyZWFkczsgaSsrKQotICAgICAgICAgICAgY3JlYXRlTmV3VGhyZWFk
KGxvY2tlciwgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50TnVt
YmVyT2ZUaHJlYWRzOwotfQotCi1zdGF0aWMgV29ya2xpc3QqIHRoZUdsb2JhbERGR1dvcmtsaXN0
Owotc3RhdGljIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzOwotc3RhdGljIHVu
c2lnbmVkIG51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzOwotCi1zdGF0aWMgdW5zaWduZWQgZ2V0
TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKQotewotICAgIHJldHVybiBudW1iZXJPZkRGR0Nv
bXBpbGVyVGhyZWFkcyA/IG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzIDogT3B0aW9uczo6bnVt
YmVyT2ZERkdDb21waWxlclRocmVhZHMoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGdldE51bWJl
ck9mRlRMQ29tcGlsZXJUaHJlYWRzKCkKLXsKLSAgICByZXR1cm4gbnVtYmVyT2ZGVExDb21waWxl
clRocmVhZHMgPyBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA6IE9wdGlvbnM6Om51bWJlck9m
RlRMQ29tcGlsZXJUaHJlYWRzKCk7Ci19Ci0KLXVuc2lnbmVkIHNldE51bWJlck9mREZHQ29tcGls
ZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAgICBhdXRvIHByZXZpb3Vz
TnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKTsKLSAgICBu
dW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFkczsKLSAgICByZXR1cm4g
cHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLXVuc2lnbmVkIHNldE51bWJlck9mRlRMQ29t
cGlsZXJUaHJlYWRzKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcykKLXsKLSAgICBhdXRvIHByZXZp
b3VzTnVtYmVyT2ZUaHJlYWRzID0gZ2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMoKTsKLSAg
ICBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcyA9IG51bWJlck9mVGhyZWFkczsKLSAgICByZXR1
cm4gcHJldmlvdXNOdW1iZXJPZlRocmVhZHM7Ci19Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxE
RkdXb3JrbGlzdCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9i
YWxXb3JrbGlzdE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxX
b3JrbGlzdE9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3JrbGlzdCA9ICZXb3Jr
bGlzdDo6Y3JlYXRlKCJERkciLCBnZXROdW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpLCBPcHRp
b25zOjpwcmlvcml0eURlbHRhT2ZERkdDb21waWxlclRocmVhZHMoKSkubGVha1JlZigpOwotICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9iYWxERkdXb3JrbGlz
dCA9IHdvcmtsaXN0OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsREZHV29ya2xpc3Q7
Ci19Ci0KLVdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCkKLXsKLSAg
ICByZXR1cm4gdGhlR2xvYmFsREZHV29ya2xpc3Q7Ci19Ci0KLXN0YXRpYyBXb3JrbGlzdCogdGhl
R2xvYmFsRlRMV29ya2xpc3Q7Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgp
Ci17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9u
Y2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2VG
bGFnLCBbXSB7Ci0gICAgICAgIFdvcmtsaXN0KiB3b3JrbGlzdCA9ICZXb3JrbGlzdDo6Y3JlYXRl
KCJGVEwiLCBnZXROdW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLCBPcHRpb25zOjpwcmlvcml0
eURlbHRhT2ZGVExDb21waWxlclRocmVhZHMoKSkubGVha1JlZigpOwotICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB0aGVHbG9iYWxGVExXb3JrbGlzdCA9IHdvcmtsaXN0
OwotICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsRlRMV29ya2xpc3Q7Ci19Ci0KLVdvcmts
aXN0KiBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCkKLXsKLSAgICByZXR1cm4gdGhl
R2xvYmFsRlRMV29ya2xpc3Q7Ci19Ci0KLVdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdEZv
cihDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IEludmFsaWRDb21waWxhdGlvbk1vZGU6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpOwotICAgIGNh
c2UgREZHTW9kZToKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci0g
ICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgotICAgICAgICBy
ZXR1cm4gZW5zdXJlR2xvYmFsRlRMV29ya2xpc3QoKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsK
LX0KLQotdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMoKSB7IHJldHVybiAyOyB9Ci0KLVdvcmts
aXN0JiBlbnN1cmVXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHN3aXRj
aCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdX
b3JrbGlzdCgpOwotICAgIGNhc2UgMToKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbEZUTFdv
cmtsaXN0KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci0gICAgfQot
fQotCi1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVy
biBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7Ci0gICAgY2FzZSAxOgotICAgICAg
ICByZXR1cm4gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLX0KLQotV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBXb3JrbGlzdCogcmVzdWx0ID0gZXhpc3RpbmdXb3JrbGlz
dEZvckluZGV4T3JOdWxsKGluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAg
IHJldHVybiAqcmVzdWx0OwotfQotCi12b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0p
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7Ci0gICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPmNvbXBsZXRl
QWxsUGxhbnNGb3JWTSh2bSk7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkK
LQotdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQotewotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU3NmUwM2U0N2U2ZWY1MDNjNmQwMTE2ZWNmYmRjMGE4YzZjNzVjODguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkRGR1BsYW4uaCIKLSNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCi0jaW5j
bHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
LSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotI2lm
IEVOQUJMRShERkdfSklUKQotCi1jbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtsaXN0PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcs
IENvbXBpbGVkIH07Ci0KLSAgICB+V29ya2xpc3QoKTsKLSAgICAKLSAgICBzdGF0aWMgUmVmPFdv
cmtsaXN0PiBjcmVhdGUoQ1N0cmluZyYmIHRpZXJOYW1lLCB1bnNpZ25lZCBudW1iZXJPZlRocmVh
ZHMsIGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Ci0gICAgCi0gICAgdm9pZCBlbnF1ZXVlKFJl
ZjxQbGFuPiYmKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86Ci0gICAgLy8g
d29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7Ci0gICAgLy8gd29y
a2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKLSAgICB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5h
bWUgVmlzaXRvcj4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIFZN
JiwgY29uc3QgRnVuYyYpOwotCi0gICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVh
ZHkoVk0mKTsKLSAgICBTdGF0ZSBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYsIENvbXBp
bGF0aW9uS2V5ID0gQ29tcGlsYXRpb25LZXkoKSk7Ci0gICAgdm9pZCByZW1vdmVBbGxSZWFkeVBs
YW5zRm9yVk0oVk0mKTsKLSAgICAKLSAgICBTdGF0ZSBjb21waWxhdGlvblN0YXRlKENvbXBpbGF0
aW9uS2V5KTsKLSAgICAKLSAgICBzaXplX3QgcXVldWVMZW5ndGgoKTsKLSAgICAKLSAgICB2b2lk
IHN1c3BlbmRBbGxUaHJlYWRzKCk7Ci0gICAgdm9pZCByZXN1bWVBbGxUaHJlYWRzKCk7Ci0gICAg
Ci0gICAgYm9vbCBpc0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7Ci0gICAgCi0gICAgLy8gT25seSBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFZp
c2l0b3ImKTsKLSAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOwotICAgIAotICAgIHZvaWQg
cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGb3JWTShWTSYpOwotICAgIAotICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwotICAgIHVuc2lnbmVkIHNldE51bWJlck9mVGhyZWFkcyh1bnNp
Z25lZCwgaW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgV29ya2xpc3QoQ1N0cmluZyYmIHRpZXJO
YW1lKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywg
aW50KTsKLSAgICB2b2lkIGNyZWF0ZU5ld1RocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYsIGlu
dCk7Ci0gICAgCi0gICAgY2xhc3MgVGhyZWFkQm9keTsKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFk
Qm9keTsKLSAgICAKLSAgICB2b2lkIHJ1blRocmVhZChUaHJlYWREYXRhKik7Ci0gICAgc3RhdGlj
IHZvaWQgdGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpOwotICAgIAotICAgIHZvaWQgcmVt
b3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFuPiwgOD4mKTsKLQot
ICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJikgY29uc3Q7
Ci0gICAgCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07Ci0gICAg
Q1N0cmluZyBtX3RocmVhZE5hbWU7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRE
YXRhPj4gbV90aHJlYWRzOwotICAgIAotICAgIC8vIFVzZWQgdG8gaW5mb3JtIHRoZSB0aHJlYWQg
YWJvdXQgd2hhdCB3b3JrIHRoZXJlIGlzIGxlZnQgdG8gZG8uCi0gICAgRGVxdWU8UmVmUHRyPFBs
YW4+PiBtX3F1ZXVlOwotICAgIAotICAgIC8vIFVzZWQgdG8gYW5zd2VyIHF1ZXN0aW9ucyBhYm91
dCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvZGUgYmxvY2suIFRoaXMKLSAgICAvLyBpcyBwYXJ0
aWN1bGFybHkgZ3JlYXQgZm9yIHRoZSBjdGlfb3B0aW1pemUgT1NSIHNsb3cgcGF0aCwgd2hpY2gg
d2FudHMKLSAgICAvLyB0byBrbm93OiBkaWQgSSBnZXQgaGVyZSBiZWNhdXNlIGEgYmV0dGVyIHZl
cnNpb24gb2YgbWUganVzdCBnb3QKLSAgICAvLyBjb21waWxlZD8KLSAgICB0eXBlZGVmIEhhc2hN
YXA8Q29tcGlsYXRpb25LZXksIFJlZlB0cjxQbGFuPj4gUGxhbk1hcDsKLSAgICBQbGFuTWFwIG1f
cGxhbnM7Ci0gICAgCi0gICAgLy8gVXNlZCB0byBxdWlja2x5IGZpbmQgd2hpY2ggcGxhbnMgaGF2
ZSBiZWVuIGNvbXBpbGVkIGFuZCBhcmUgcmVhZHkgdG8KLSAgICAvLyBiZSBjb21wbGV0ZWQuCi0g
ICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMTY+IG1fcmVhZHlQbGFuczsKLSAgICBSZWY8QXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKLSAgICBVbmNoZWNrZWRDb25kaXRp
b24gbV9wbGFuQ29tcGlsZWQ7Ci0KLSAgICBVbmNoZWNrZWRMb2NrIG1fc3VzcGVuc2lvbkxvY2s7
Ci0gICAgQm94PFVuY2hlY2tlZExvY2s+IG1fbG9jazsKLX07Ci0KLUpTX0VYUE9SVF9QUklWQVRF
IHVuc2lnbmVkIHNldE51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzKHVuc2lnbmVkKTsKLUpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIHNldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKHVuc2ln
bmVkKTsKLQotLy8gRm9yIERGR01vZGUgY29tcGlsYXRpb25zLgotSlNfRVhQT1JUX1BSSVZBVEUg
V29ya2xpc3QmIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci1KU19FWFBPUlRfUFJJVkFURSBX
b3JrbGlzdCogZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgpOwotCi0vLyBGb3IgRlRM
TW9kZSBhbmQgRlRMRm9yT1NSRW50cnlNb2RlIGNvbXBpbGF0aW9ucy4KLUpTX0VYUE9SVF9QUklW
QVRFIFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwotSlNfRVhQT1JUX1BSSVZB
VEUgV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKTsKLQotV29ya2xp
c3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKENvbXBpbGF0aW9uTW9kZSk7Ci0KLS8vIFNpbXBs
aWZ5IGRvaW5nIHRoaW5ncyBmb3IgYWxsIHdvcmtsaXN0cy4KLXVuc2lnbmVkIG51bWJlck9mV29y
a2xpc3RzKCk7Ci1Xb3JrbGlzdCYgZW5zdXJlV29ya2xpc3RGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCk7Ci1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKHVuc2lnbmVkIGlu
ZGV4KTsKLVdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgp
OwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgY29tcGxldGVBbGxQbGFuc0Zv
clZNKFZNJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci12
b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIFZNJiwgY29uc3QgRnVuYyYpOwot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YzI2NmY2ZjM2NTYxYWM2ZWM2NDI1MjUxYWRhOGQ2ZjQyZjIwMGM4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3RJbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJERkdQbGFuSW5saW5lcy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVu
YyYgZnVuYykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspIHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCB2bSwgZnVuYyk7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBXb3JrbGlzdDo6
aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1
bmMmIGZ1bmMpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKFBs
YW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsK
LSAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgZnVuYyk7Ci0gICAg
fQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVu
YywgdHlwZW5hbWUgVmlzaXRvcj4KLXZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9y
JiwgVk0mLCBjb25zdCBGdW5jJikKLXsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmgKaW5kZXggZWJjNjMzM2IyMjAxMzY4YWY0Y2E3NWFiZDczZWY1MDZjNjRjNDU4MS4u
YWE5YzZlMzY5YzE1OTdkOWZjODkxMjZkZTljZTc0ZGZlZDEzYWQxZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNCArMjcsMTQgQEAKIAogI2lmIEVOQUJM
RShGVExfSklUKQogCi0jaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCiAjaW5jbHVkZSAiRlRMU3Rh
dGUuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiBleHRlcm4gY29uc3QgY2hhciogY29uc3QgdGllck5hbWU7CiAKLXZvaWQg
Y29tcGlsZShTdGF0ZSYsIERGRzo6U2FmZXBvaW50OjpSZXN1bHQmKTsKK3ZvaWQgY29tcGlsZShT
dGF0ZSYsIFNhZmVwb2ludDo6UmVzdWx0Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggMTc1OTkyZTdiZDU2NzA1
M2Y2ZTFkNDQzMDJjNzI2NTE0ZDFlNWU2NS4uMWViMWQ4YWE5ZDY3ZmFkODViYjg1MjU4ZDNlZWVi
ZjljOTAwZDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xMjks
NyArMTI5LDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICB9CiAKICAgICBzd2l0Y2gg
KGdyYXBoLm1fcGxhbi5tb2RlKCkpIHsKLSAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICBjYXNlIEpJ
VENvbXBpbGF0aW9uTW9kZTo6RlRMOiB7CiAgICAgICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVw
ID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1haW5QYXRoSnVtcHM7CkBAIC0xOTEs
NyArMTkxLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogeworICAgIGNhc2UgSklU
Q29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeTogewogICAgICAgICAvLyBXZSBqdW1wIHRv
IGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0ZXIgaGF2aW5nIGJveGVkIHVwIGFsbCBv
ZiB0aGUKICAgICAgICAgLy8gdmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBFdmVyeXRo
aW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhpcwogICAgICAgICAvLyBwb2ludCB3ZSd2
ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNpY2FsbHkgd2UganVzdCBoYXZlIHRvIG1h
a2UgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
aW5kZXggYzA0NzUyZDdiZDlmMWIyZjhhMmVlNTMzMTU3ODEyZTlmZjU1NTFhOS4uODE2N2ZhM2Qw
NTJjMTBiZGYxYjZmNjQ5MGNlMzU5MDdkYWQ4YmYzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpKSk7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9y
T1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAgICBh
dXRvKiBqaXRDb2RlID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpOwogICAg
ICAgICAgICAgICAgIEZpeGVkVmVjdG9yPERGRzo6Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rmx1c2hG
b3JtYXRzKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kp
CkBAIC0xOTQ2Nyw3ICsxOTQ2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGF0IGxl
YXN0IHNvbWUgdmFsaWRhdGlvbiB3aGVuIE9TUiBlbnRlcmluZy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTUxMQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZh
bGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1f
cGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50
cnkpIHsKIAogICAgICAgICAgICAgICAgIGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9n
cmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGV4aXRPcmlnaW4pKQogICAgICAgICAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNv
ZGUgbG9jYWwgbm90IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIG9wZXJhbmQsICIsIGF2YWlsYWJp
bGl0eSA9ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKaW5kZXggMTBiODg2MmM1OTU4
ZWRiYzU5ZDJhMWU4MzEzZDM3Nzc0YTNiODRmZS4uMDFiZGVlYzlmZDM3OTZmNGU0N2RiYWU3MTIw
ZDllNmRhZGU2ZGIwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MiwxMSArNDIsMTEgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IGdyYXBo
KGdyYXBoKQogewogICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUoKSkgewotICAgIGNhc2Ug
RlRMTW9kZTogeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6IHsKICAgICAgICAg
aml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9u
TW9kZTo6RlRMRm9yT1NSRW50cnk6IHsKICAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29k
ZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CiAgICAgICAgIGNv
ZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVkQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRleChn
cmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCmluZGV4IGQyOTUzZTEwY2M5YTFkYWI2YjY3ODBmYjBmMmQ2NDM1NWRiN2M4
M2YuLmEzZWZlYmYxZGE3Nzg4ZmYzMDNlNGY2ODRmNzg3OTVhMWRhY2NjNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTIgQEAgY2xhc3MgUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTsKIAogaW5saW5lIGJvb2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpCiB7Ci0gICAgcmV0dXJuIERGRzo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChERkc6
OkZUTE1vZGUpOworICAgIHJldHVybiBERkc6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoSklU
Q29tcGlsYXRpb25Nb2RlOjpGVEwpOwogfQogCiBpbmxpbmUgYm9vbCBzaG91bGREdW1wRGlzYXNz
ZW1ibHkoKQogewotICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseShERkc6OkZU
TE1vZGUpOworICAgIHJldHVybiBERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseShKSVRDb21waWxh
dGlvbk1vZGU6OkZUTCk7CiB9CiAKIGNsYXNzIFN0YXRlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKaW5kZXggODYxYTQwMmU1MGQwYmNjMGZlYWU2MDMwNDdjZjM1YzJlY2RjNGRlNy4u
NWM1YTIzMGI0ZmYwM2MzNzg1ZDRkMzQyN2UzY2JiYjQ1NmI0ZGMwMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ29u
c2VydmF0aXZlUm9vdHMuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIKICNpbmNs
dWRlICJFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtNDYsNyArNDUsNyBAQAogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgotI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCisj
aW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIkpTV2Vha01hcC5oIgpAQCAtNjM5LDE3ICs2MzgsMTcgQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1
cm47CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5jb21wbGV0ZUFsbEZvclZNKG1fdm0pOworICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9i
YWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUGxhbnNGb3JWTShtX3ZtKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBG
dW5jJiBmdW5jKQordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSGVhcDo6aXRlcmF0
ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
RnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mIGZ1bmMpCiB7CiAgICAgbV9jb2RlQmxvY2tzLT5p
dGVyYXRlQ3VycmVudGx5RXhlY3V0aW5nKGZ1bmMpOwotICAgIGlmIChPcHRpb25zOjp1c2VKSVQo
KSkKLSAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1
bmMpOworI2lmIEVOQUJMRShKSVQpCisgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmts
aXN0KCkuaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBtX3ZtLCBmdW5jKTsKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBW
aXNpdG9yPgpAQCAtNzI2LDEyICs3MjUsMTEgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQog
CiB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpCiB7Ci0jaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVhZFBs
YW5zKG1fdm0pOwotI2VuZGlmCisjaWYgRU5BQkxFKEpJVCkKKyAgICBKSVRXb3JrbGlzdDo6ZW5z
dXJlR2xvYmFsV29ya2xpc3QoKS5yZW1vdmVEZWFkUGxhbnMobV92bSk7CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKIH0KIAogc3RydWN0IEdhdGhlckV4dHJhSGVhcERhdGEgOiBNYXJrZWRCbG9jazo6
Q291bnRGdW5jdG9yIHsKQEAgLTE2NTMsMTQgKzE2NTEsNiBAQCB2b2lkIEhlYXA6OnN0b3BUaGVQ
ZXJpcGhlcnkoR0NDb25kdWN0b3IgY29ubikKICAgICAgICAgICAgIHZpc2l0b3IudXBkYXRlTXV0
YXRvcklzU3RvcHBlZChOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgICAgICB9KTsKIAotI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Ci0gICAgICAgIERlZmVyR0NG
b3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjplbnN1cmVH
bG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsRm9yVk0obV92bSkKLSAgICAgICAgICAgICYmIGNv
bm4gPT0gR0NDb25kdWN0b3I6OkNvbGxlY3RvcikKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7
Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvbm4pOwog
ICAgIAogICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0oKS5zaGFkb3dDaGlja2VuKCkp
CkBAIC0xODA2LDcgKzE3OTYsNiBAQCB2b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3coKQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fd29ybGRTdGF0ZS5sb2FkKCkgJiBoYXNBY2Nlc3NCaXQpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCEobV93b3JsZFN0YXRlLmxvYWQoKSAmIHN0b3BwZWRCaXQpKTsK
ICAgICAKLSAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOwog
ICAgIG1fbXV0YXRvckRpZFJ1biA9IHRydWU7CiB9CkBAIC0xOTIzLDcgKzE5MTIsNiBAQCB2b2lk
IEhlYXA6OmFjcXVpcmVBY2Nlc3NTbG93KCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShvbGRT
dGF0ZSAmIHN0b3BwZWRCaXQpKTsKICAgICAgICAgdW5zaWduZWQgbmV3U3RhdGUgPSBvbGRTdGF0
ZSB8IGhhc0FjY2Vzc0JpdDsKICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFu
Z2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHsKLSAgICAgICAgICAgIGhhbmRsZUdDRGlkSklU
KCk7CiAgICAgICAgICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKICAgICAgICAgICAgIG1fbXV0
YXRvckRpZFJ1biA9IHRydWU7CiAgICAgICAgICAgICBzdG9wSWZOZWNlc3NhcnkoKTsKQEAgLTIw
MDMsMTggKzE5OTEsNiBAQCB2b2lkIEhlYXA6OnJlbGlucXVpc2hDb25uKCkKICAgICB3aGlsZSAo
cmVsaW5xdWlzaENvbm4obV93b3JsZFN0YXRlLmxvYWQoKSkpIHsgfQogfQogCi1ib29sIEhlYXA6
OmhhbmRsZUdDRGlkSklUKHVuc2lnbmVkIG9sZFN0YXRlKQotewotICAgIFJFTEVBU0VfQVNTRVJU
KG9sZFN0YXRlICYgaGFzQWNjZXNzQml0KTsKLSAgICBpZiAoIShvbGRTdGF0ZSAmIGdjRGlkSklU
Qml0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFy
ZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+Z2NEaWRKSVRCaXQpKSB7Ci0gICAg
ICAgIFdURjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpo
YW5kbGVOZWVkRmluYWxpemUodW5zaWduZWQgb2xkU3RhdGUpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQob2xkU3RhdGUgJiBoYXNBY2Nlc3NCaXQpOwpAQCAtMjAzMiwyNiArMjAwOCwxMSBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUodW5zaWduZWQgb2xkU3RhdGUp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSGVhcDo6aGFuZGxlR0NEaWRKSVQoKQotewot
ICAgIHdoaWxlIChoYW5kbGVHQ0RpZEpJVChtX3dvcmxkU3RhdGUubG9hZCgpKSkgeyB9Ci19Ci0K
IHZvaWQgSGVhcDo6aGFuZGxlTmVlZEZpbmFsaXplKCkKIHsKICAgICB3aGlsZSAoaGFuZGxlTmVl
ZEZpbmFsaXplKG1fd29ybGRTdGF0ZS5sb2FkKCkpKSB7IH0KIH0KIAotdm9pZCBIZWFwOjpzZXRH
Q0RpZEpJVCgpCi17Ci0gICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAotICAgICAgICBbJl0g
KHVuc2lnbmVkJiBzdGF0ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dGF0ZSAmIHN0b3BwZWRCaXQpOwotICAgICAgICAgICAgc3RhdGUgfD0gZ2NEaWRKSVRCaXQ7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSk7Ci19Ci0KIHZvaWQgSGVhcDo6c2V0
TmVlZEZpbmFsaXplKCkKIHsKICAgICBtX3dvcmxkU3RhdGUuZXhjaGFuZ2VPcihuZWVkRmluYWxp
emVCaXQpOwpAQCAtMjE2NywxNCArMjEyOCwxMyBAQCB2b2lkIEhlYXA6OnN3ZWVwSW5GaW5hbGl6
ZSgpCiAKIHZvaWQgSGVhcDo6c3VzcGVuZENvbXBpbGVyVGhyZWFkcygpCiB7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCisjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBXZSBlbnN1cmUgdGhlIHdvcmtsaXN0
cyBzbyB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIGZvciB0aGUgbXV0YXRvciB0byBzdGFydCBhIG5l
dyB3b3JrbGlzdAogICAgIC8vIGFmdGVyIHdlIGhhdmUgc3VzcGVuZGVkIHRoZSBvbmVzIHRoYXQg
aGUgaGFkIHN0YXJ0ZWQgYmVmb3JlLiBUaGF0J3Mgbm90IHZlcnkgZXhwZW5zaXZlIHNpbmNlCiAg
ICAgLy8gdGhlIHdvcmtsaXN0cyB1c2UgQXV0b21hdGljVGhyZWFkcyBhbnl3YXkuCiAgICAgaWYg
KCFPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAodW5zaWduZWQg
aSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjplbnN1cmVX
b3JrbGlzdEZvckluZGV4KGkpLnN1c3BlbmRBbGxUaHJlYWRzKCk7CisgICAgSklUV29ya2xpc3Q6
OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuc3VzcGVuZEFsbFRocmVhZHMoKTsKICNlbmRpZgogfQog
CkBAIC0yMzg2LDExICsyMzQ2LDEwIEBAIHZvaWQgSGVhcDo6ZGlkRmluaXNoQ29sbGVjdGlvbigp
CiAKIHZvaWQgSGVhcDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKCkKIHsKLSNpZiBFTkFCTEUoREZH
X0pJVCkKKyNpZiBFTkFCTEUoSklUKQogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnJlc3Vt
ZUFsbFRocmVhZHMoKTsKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5y
ZXN1bWVBbGxUaHJlYWRzKCk7CiAjZW5kaWYKIH0KIApAQCAtMjkwMiwyNiArMjg2MSwyNSBAQCB2
b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAgIENvbnN0cmFpbnRWb2xhdGls
aXR5OjpHcmV5ZWRCeU1hcmtpbmcsCiAgICAgICAgIENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFy
YWxsZWwpOwogICAgIAotI2lmIEVOQUJMRShERkdfSklUKQorI2lmIEVOQUJMRShKSVQpCiAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIG1fY29uc3RyYWludFNldC0+YWRkKAot
ICAgICAgICAgICAgIkR3IiwgIkRGRyBXb3JrbGlzdHMiLAorICAgICAgICAgICAgIkp3IiwgIkpJ
VCBXb3JrbGlzdCIsCiAgICAgICAgICAgICBNQUtFX01BUktJTkdfQ09OU1RSQUlOVF9FWEVDVVRP
Ul9QQUlSKChbdGhpc10gKGF1dG8mIHZpc2l0b3IpIHsKLSAgICAgICAgICAgICAgICBTZXRSb290
TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6REZHV29y
a0xpc3RzKTsKKyAgICAgICAgICAgICAgICBTZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29w
ZSh2aXNpdG9yLCBSb290TWFya1JlYXNvbjo6SklUV29ya0xpc3QpOwogCi0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAg
ICAgICAgICAgICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdl
YWtSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgICAgICAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1
cmVHbG9iYWxXb3JrbGlzdCgpLnZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxtb3N0IGNlcnRh
aW5seSB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI5Ci0gICAgICAgICAgICAgICAgREZHOjppdGVyYXRl
Q29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsCisgICAgICAgICAgICAgICAgSklUV29ya2xpc3Q6OmVu
c3VyZUdsb2JhbFdvcmtsaXN0KCkuaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLAogICAg
ICAgICAgICAgICAgICAgICBtX3ZtLAogICAgICAgICAgICAgICAgICAgICBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKGNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpc
biIsIHZpc2l0b3IpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJKSVQgV29ya2xpc3Rz
OlxuIiwgdmlzaXRvcik7CiAgICAgICAgICAgICB9KSksCiAgICAgICAgICAgICBDb25zdHJhaW50
Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKaW5kZXggYWIyODQ4ZjhjYzYzOTQyODg4MTZiODcxODhiOWM4NmMzMTg4YTRhMC4uZjA5
OTJlMjZmZDE4YWY3NzhlYWNhNDJlZTVlZDFkZmQ3YjUwNzAyNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaApAQCAtOTcsNyArOTcsNiBAQCBjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdDsK
IAogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKLWNsYXNzIFdvcmtsaXN0
OwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpICYmIEFTU0VSVF9FTkFCTEVECkBAIC00OTUsMTYg
KzQ5NCwxMiBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWNxdWlyZUFj
Y2Vzc1Nsb3coKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlbGVhc2VBY2Nlc3NTbG93
KCk7CiAgICAgCi0gICAgYm9vbCBoYW5kbGVHQ0RpZEpJVCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBo
YW5kbGVHQ0RpZEpJVCgpOwotICAgIAogICAgIGJvb2wgaGFuZGxlTmVlZEZpbmFsaXplKHVuc2ln
bmVkKTsKICAgICB2b2lkIGhhbmRsZU5lZWRGaW5hbGl6ZSgpOwogICAgIAogICAgIGJvb2wgcmVs
aW5xdWlzaENvbm4odW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNoUmVsaW5xdWlzaGluZ0Nvbm4o
KTsKICAgICAKLSAgICB2b2lkIHNldEdDRGlkSklUKCk7CiAgICAgdm9pZCBzZXROZWVkRmluYWxp
emUoKTsKICAgICB2b2lkIHdhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwogICAgIApAQCAtNTc5LDgg
KzU3NCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG92ZXJDcml0aWNhbE1lbW9yeVRocmVzaG9s
ZChNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSBtZW1vcnlUaHJlc2hvbGRDYWxsVHlwZSA9IE1lbW9y
eVRocmVzaG9sZENhbGxUeXBlOjpDYWNoZWQpOwogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci0gICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29t
cGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCBpdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9yPgogICAgIHZv
aWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3NXaXRob3V0SG9sZGluZ0xv
Y2tzKFZpc2l0b3ImLCBjb25zdCBGdW5jJik7CkBAIC03MTYsOSArNzExLDggQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG11dGF0b3JIYXNDb25uQml0ID0gMXUgPDwg
MHU7IC8vIE11c3QgYWxzbyBiZSBwcm90ZWN0ZWQgYnkgdGhyZWFkTG9jay4KICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIHN0b3BwZWRCaXQgPSAxdSA8PCAxdTsgLy8gT25seSBzZXQgd2hl
biAhaGFzQWNjZXNzQml0CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBoYXNBY2Nlc3NC
aXQgPSAxdSA8PCAydTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGdjRGlkSklUQml0
ID0gMXUgPDwgM3U7IC8vIFNldCB3aGVuIHRoZSBHQyBkaWQgc29tZSBKSVRpbmcsIHNvIG9uIHJl
c3VtZSB3ZSBuZWVkIHRvIGNwdWlkLgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbmVl
ZEZpbmFsaXplQml0ID0gMXUgPDwgNHU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
dXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNl
IHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBuZWVkRmluYWxpemVCaXQgPSAxdSA8PCAzdTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNHU7IC8vIEFsbG93cyB0aGUgbXV0YXRv
ciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8dW5zaWdu
ZWQ+IG1fd29ybGRTdGF0ZTsKICAgICBib29sIG1fd29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9Owog
ICAgIExvY2sgbV92aXNpdFJhY2VMb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUm9vdE1hcmtSZWFzb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jv
b3RNYXJrUmVhc29uLmgKaW5kZXggMjNmYjU5ODQ4OTg3ZmM1Y2Y1YmJmNzUzNDE1YjU5YzM0YWE0
N2E0ZC4uZjIwOTYzMzZhMmQyYTM2MTUzMzAxMmI0MWUyODJmNTA1MDNlNTVmNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUm9vdE1hcmtSZWFzb24uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Sb290TWFya1JlYXNvbi5oCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHYoV2Vha01hcFNwYWNlKSBcCiAgICAgdihXZWFrU2V0cykg
XAogICAgIHYoT3V0cHV0KSBcCi0gICAgdihERkdXb3JrTGlzdHMpIFwKKyAgICB2KEpJVFdvcmtM
aXN0KSBcCiAgICAgdihDb2RlQmxvY2tzKSBcCiAgICAgdihET01HQ091dHB1dCkKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
ZjJjYjVjY2IxYWE5YWM1ZTQ0YTYwMjNkNTQ2ZmRhMzRmZDM5YjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKQEAgLTAsMCAr
MSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVFBsYW4uaCIKKworI2lmIEVO
QUJMRShKSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitCYXNlbGluZUpJVFBsYW46OkJhc2VsaW5l
SklUUGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQorICAgIDogSklUUGxhbihKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5l
LCBjb2RlQmxvY2spCisgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK3sKKyAgICBtX2ppdC5kb01haW5UaHJlYWRQcmVwYXJh
dGlvbkJlZm9yZUNvbXBpbGUoKTsKK30KKworYXV0byBCYXNlbGluZUpJVFBsYW46OmNvbXBpbGVJ
blRocmVhZEltcGwoKSAtPiBDb21waWxhdGlvblBhdGgKK3sKKyAgICBtX2ppdC5jb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgcmV0dXJu
IEJhc2VsaW5lUGF0aDsKK30KKworc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBtX2ppdC5jb2RlU2l6ZSgpOworfQorCitDb21waWxhdGlvblJl
c3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKK3sKKyAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN3aXRjaCAocmVz
dWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFp
bGVkIikpOworICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAg
SklUIGNvbXBpbGF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRB
bnl0aW1lU29vbigpOworICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bDoKKyAgICAgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOworICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nl
c3NmdWwuIik7CisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUobV9jb2RlQmxvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+aml0U29vbigpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODU2ZTAxMDhj
NTY5NzY5MzUzNmNlZWMyY2ExNTVmODA4YzMyOGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uaApAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKSVRQbGFuLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAi
SklULmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCYXNlbGluZUpJVFBsYW4gZmluYWwg
OiBwdWJsaWMgSklUUGxhbiB7CisgICAgdXNpbmcgQmFzZSA9IEpJVFBsYW47CisKK3B1YmxpYzoK
KyAgICBCYXNlbGluZUpJVFBsYW4oQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKKworICAgIENvbXBpbGF0aW9uUGF0aCBjb21waWxlSW5UaHJlYWRJ
bXBsKCkgZmluYWw7CisgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgQ29t
cGlsYXRpb25SZXN1bHQgZmluYWxpemUoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBKSVQg
bV9qaXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggYmEyZGUzYjYwZmFkY2VmNWNlNTlkYjM4
NTZlNjAwYTNkMzQ0MjA4YS4uNTU1NjMwMzdhZWI1OGZlYzliM2YwM2Y3Y2ZlZTFmYzBkZTNlY2Uy
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNjYyLDEwICs2NjIsNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAg
TW9ub3RvbmljVGltZSBiZWZvcmUgeyB9OwotICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGls
ZVRpbWVzKCkpKQotICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAK
ICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5
TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBp
bGU6CkBAIC04MjEsMjAgKzgxNyw2IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKICAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1
ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7Ci0KLSAgICBNb25vdG9uaWNU
aW1lIGFmdGVyIHsgfTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkg
ewotICAgICAgICBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAgICAgIGlmIChP
cHRpb25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpKQotICAgICAgICAgICAgdG90YWxCYXNl
bGluZUNvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwotICAgIH0KLSAgICBpZiAoVU5MSUtF
TFkocmVwb3J0Q29tcGlsZVRpbWVzKCkpKSB7Ci0gICAgICAgIENTdHJpbmcgY29kZUJsb2NrTmFt
ZSA9IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spOwotICAgICAgICAKLSAgICAgICAgZGF0YUxvZygi
T3B0aW1pemVkICIsIGNvZGVCbG9ja05hbWUsICIgd2l0aCBCYXNlbGluZSBKSVQgaW50byAiLCBt
X2xpbmtCdWZmZXItPnNpemUoKSwgIiBieXRlcyBpbiAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxp
c2Vjb25kcygpLCAiIG1zLlxuIik7Ci0gICAgfQotCiAgICAgbGluaygpOwogfQogCkBAIC0xMDE4
LDYgKzEwMDAsMTMgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVh
ZCgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KIAorc2l6ZV90IEpJVDo6
Y29kZVNpemUoKSBjb25zdAoreworICAgIGlmICghbV9saW5rQnVmZmVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7Cit9CisKIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwpAQCAtMTA3NCwy
MSArMTA2MywxMSBAQCBpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKLWJvb2wgSklUOjpyZXBv
cnRDb21waWxlVGltZXMoKQotewotICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKSB8fCBPcHRpb25zOjpyZXBvcnRCYXNlbGluZUNvbXBpbGVUaW1lcygpOwotfQotCi1ib29s
IEpJVDo6Y29tcHV0ZUNvbXBpbGVUaW1lcygpCi17Ci0gICAgcmV0dXJuIHJlcG9ydENvbXBpbGVU
aW1lcygpIHx8IE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCk7Ci19Ci0KIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNo
TWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90
YWxDb21waWxlVGltZXMoKSkgewotICAgICAgICByZXN1bHQuYWRkKCJUb3RhbCBDb21waWxlIFRp
bWUiLCB0b3RhbEJhc2VsaW5lQ29tcGlsZVRpbWUgKyB0b3RhbERGR0NvbXBpbGVUaW1lICsgdG90
YWxGVExDb21waWxlVGltZSk7CisgICAgICAgIHJlc3VsdC5hZGQoIlRvdGFsIENvbXBpbGUgVGlt
ZSIsIHRvdGFsQ29tcGlsZVRpbWUoKSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkJhc2VsaW5lIENv
bXBpbGUgVGltZSIsIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSk7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIHJlc3VsdC5hZGQoIkRGRyBDb21waWxlIFRpbWUiLCB0b3RhbERGR0NvbXBp
bGVUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGNiOGI0YTEwMDZlMGFhOThjNGZm
YTI5OTVmYmVlMmViOWVkOTVjNzcuLjc1YzljYjk2YjEzNjUzMmYwODYxZjJmMGE4MDU4ZWZjNmIw
NTZiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjE2LDYgKzIxNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFs
aXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAg
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlv
bktleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iODllOGUwNGVlMTI2Mzc4ODZmZDI4ZjRhNGJhYjYwYjBjNDE1NmQ3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlv
bktleS5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRD
b21waWxhdGlvbktleS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0
LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50
KCIoQ29tcGlsZSBvZiAiLCAqbV9wcm9maWxlZEJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzNjYTJhYTA0ZDBm
ZmU3ZGVjZTU0NTQwMGNjMzNmYjE2ZmNjZmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCkBAIC0wLDAgKzEsMTAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJKSVRDb21waWxhdGlvbk1vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3Mg
Q29kZUJsb2NrU2V0OworCitjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CitwdWJsaWM6CisgICAg
SklUQ29tcGlsYXRpb25LZXkoKQorICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQor
ICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikK
KyAgICB7CisgICAgfQorICAgIAorICAgIEpJVENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAg
ICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEpJVENv
bXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJs
b2NrKQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxv
Y2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICB9CisgICAgCisgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9Cisg
ICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3By
b2ZpbGVkQmxvY2sKKyAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJvZmls
ZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9u
TW9kZT46OnR5cGU+KG1fbW9kZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOworfTsKKworc3RydWN0IEpJVENvbXBp
bGF0aW9uS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSklUQ29tcGls
YXRpb25LZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBhLCBjb25zdCBKSVRDb21waWxhdGlvbktleSYg
YikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpKSVRDb21waWxhdGlvbktl
eT4gOiBKU0M6OkpJVENvbXBpbGF0aW9uS2V5SGFzaCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
OkpJVENvbXBpbGF0aW9uS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkpJVENvbXBp
bGF0aW9uS2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1OWQzOTRh
NDY3YzVmZGQ2OGZmZTJmOWMyZmI1MjU2YTc0MjIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uTW9kZS5jcHAKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25Nb2RlLmgiCisKKyNpZiBF
TkFCTEUoSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2Rl
OjpJbnZhbGlkQ29tcGlsYXRpb246CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZENvbXBpbGF0
aW9uTW9kZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6
OkJhc2VsaW5lOgorICAgICAgICBvdXQucHJpbnQoIkJhc2VsaW5lTW9kZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRzoKKyAgICAgICAgb3V0LnBy
aW50KCJERkdNb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9u
TW9kZTo6RlRMOgorICAgICAgICBvdXQucHJpbnQoIkZUTE1vZGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeToKKyAgICAgICAg
b3V0LnByaW50KCJGVExGb3JPU1JFbnRyeU1vZGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uTW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb21waWxhdGlvbk1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmMwZTA3ZmY1M2NhMzE1OTliNTY4
ZWZhMjE1OTFhNjMyY2I5NTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb21waWxhdGlvbk1vZGUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNz
IEpJVENvbXBpbGF0aW9uTW9kZSB7CisgICAgSW52YWxpZENvbXBpbGF0aW9uLAorICAgIEJhc2Vs
aW5lLAorICAgIERGRywKKyAgICBGVEwsCisgICAgRlRMRm9yT1NSRW50cnkKK307CisKK2lubGlu
ZSBib29sIGlzRlRMKEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6CisgICAgY2FzZSBKSVRDb21w
aWxhdGlvbk1vZGU6OkZUTEZvck9TUkVudHJ5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6SklUQ29tcGlsYXRpb25Nb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA4ZWRkZjZkYmMy
M2VhZTdmOTIwMDE0ZDg0ZTUwYTA5MDA3YjNjN2NmLi4yMWFmMzY1MzA5ZDI3OTMzNzFkZTZlYjQw
MGI0NDY4YWE4MzcwYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKQEAgLTMyLDExICszMiw5IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzSW5saW5lcy5oIgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9kZS5oIgog
I2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVk
ZSAiREZHVGh1bmtzLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRlICJGcmFtZVRyYWNl
cnMuaCIKQEAgLTQ2LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRF
eGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCIKKyNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24uaCIKQEAgLTE4OTgsNDAgKzE4OTcsMjggQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaXplLCBTbG93UGF0aFJldHVyblR5cGUsIChWTSogdm1Q
b2ludGVyLAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51bGxwdHIpOwog
ICAgIH0KIAotICAgIC8vIFdlIGNhbm5vdCBiZSBpbiB0aGUgcHJvY2VzcyBvZiBhc3luY2hyb25v
dXMgY29tcGlsYXRpb24gYW5kIGFsc28gaGF2ZSBhbiBvcHRpbWl6ZWQKLSAgICAvLyByZXBsYWNl
bWVudC4KLSAgICBERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdHbG9iYWxE
RkdXb3JrbGlzdE9yTnVsbCgpOwotICAgIEFTU0VSVCgKLSAgICAgICAgIXdvcmtsaXN0Ci0gICAg
ICAgIHx8ICEod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleShj
b2RlQmxvY2ssIERGRzo6REZHTW9kZSkpICE9IERGRzo6V29ya2xpc3Q6Ok5vdEtub3duCi0gICAg
ICAgICYmIGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkpOwotCi0gICAgREZH
OjpXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKLSAgICBpZiAod29ya2xpc3QpIHsKLSAg
ICAgICAgLy8gVGhlIGNhbGwgdG8gREZHOjpXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0oKSB3aWxsIGNvbXBsZXRlIGFsbCByZWFkeQotICAgICAgICAvLyAoaS5lLiBjb21waWxl
ZCkgY29kZSBibG9ja3MuIEJ1dCBpZiBpdCBjb21wbGV0ZXMgb3Vycywgd2UgYWxzbyBuZWVkIHRv
IGtub3cKLSAgICAgICAgLy8gd2hhdCB0aGUgcmVzdWx0IHdhcyBzbyB0aGF0IHdlIGRvbid0IHBs
b3cgYWhlYWQgYW5kIGF0dGVtcHQgT1NSIG9yIGltbWVkaWF0ZQotICAgICAgICAvLyByZW9wdGlt
aXphdGlvbi4gVGhpcyB3aWxsIGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUg
SklUIGV4ZWN1dGlvbgotICAgICAgICAvLyBjb3VudCB0aHJlc2hvbGQgZGVwZW5kaW5nIG9uIHdo
YXQgaGFwcGVuZWQsIHNvIGlmIHRoZSBjb21waWxhdGlvbiB3YXMgYW55dGhpbmcKLSAgICAgICAg
Ly8gYnV0IHN1Y2Nlc3NmdWwgd2UganVzdCB3YW50IHRvIHJldHVybiBlYXJseS4gU2VlIHRoZSBj
YXNlIGZvciB3b3JrbGlzdFN0YXRlID09Ci0gICAgICAgIC8vIERGRzo6V29ya2xpc3Q6OkNvbXBp
bGVkLCBiZWxvdy4KLSAgICAgICAgCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZl
IGFsdGVybmF0aXZlbHkganVzdCBjYWxsZWQgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoKQot
ICAgICAgICAvLyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdlIGNvdWxkIGhh
dmUgdGhlbiBjYWxsZWQKLSAgICAgICAgLy8gY29tcGxldGVBbmRTY2hlZHVsZU9TUigpIGJlbG93
LiBCdXQgdGhhdCB3b3VsZCBoYXZlIG1lYW50IHRoYXQgaXQgY291bGQgdGFrZQotICAgICAgICAv
LyBsb25nZXIgZm9yIGNvZGUgYmxvY2tzIHRvIGJlIGNvbXBsZXRlZDogdGhleSB3b3VsZCBvbmx5
IGNvbXBsZXRlIHdoZW4gKnRoZWlyKgotICAgICAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dl
ciBmaXJlZDsgYnV0IHRoYXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMK
LSAgICAgICAgLy8gcmFjeS4gSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgY29kZSBibG9ja3MgdGhh
dCBuZXZlciBydW4gYWdhaW4gYWZ0ZXIgYmVpbmcKLSAgICAgICAgLy8gY29tcGlsZWQgd291bGQg
c2l0IG9uIHRoZSB3b3JrbGlzdCB1bnRpbCBuZXh0IEdDLiBUaGF0J3MgZmluZSwgYnV0IGl0J3MK
LSAgICAgICAgLy8gcHJvYmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMg
dG8gY29tcGxldGUgY29kZSBibG9ja3MgYXMgc29vbiBhcwotICAgICAgICAvLyBwb3NzaWJsZSBp
biBvcmRlciB0byBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiB1cyBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZSBhZnRlcgotICAgICAgICAvLyBvcHRpbWl6ZWQgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJs
ZS4KLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSgKLSAgICAgICAgICAgIHZtLCBERkc6OkNvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywg
REZHOjpERkdNb2RlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdvcmtsaXN0U3RhdGUgPSBERkc6
OldvcmtsaXN0OjpOb3RLbm93bjsKLQotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29y
a2xpc3Q6OkNvbXBpbGluZykgeworICAgIC8vIFRoZSBjYWxsIHRvIEpJVFdvcmtsaXN0Ojpjb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgpIHdpbGwgY29tcGxldGUgYWxsIHJlYWR5CisgICAgLy8g
KGkuZS4gY29tcGlsZWQpIGNvZGUgYmxvY2tzLiBCdXQgaWYgaXQgY29tcGxldGVzIG91cnMsIHdl
IGFsc28gbmVlZCB0byBrbm93CisgICAgLy8gd2hhdCB0aGUgcmVzdWx0IHdhcyBzbyB0aGF0IHdl
IGRvbid0IHBsb3cgYWhlYWQgYW5kIGF0dGVtcHQgT1NSIG9yIGltbWVkaWF0ZQorICAgIC8vIHJl
b3B0aW1pemF0aW9uLiBUaGlzIHdpbGwgaGF2ZSBhbHJlYWR5IGFsc28gc2V0IHRoZSBhcHByb3By
aWF0ZSBKSVQgZXhlY3V0aW9uCisgICAgLy8gY291bnQgdGhyZXNob2xkIGRlcGVuZGluZyBvbiB3
aGF0IGhhcHBlbmVkLCBzbyBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGFueXRoaW5nCisgICAgLy8g
YnV0IHN1Y2Nlc3NmdWwgd2UganVzdCB3YW50IHRvIHJldHVybiBlYXJseS4gU2VlIHRoZSBjYXNl
IGZvciB3b3JrbGlzdFN0YXRlID09CisgICAgLy8gSklUV29ya2xpc3Q6OkNvbXBpbGVkLCBiZWxv
dy4KKworICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIGFsdGVybmF0aXZlbHkganVzdCBj
YWxsZWQgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUoKQorICAgIC8vIGhlcmUsIGFuZCBpZiBp
dCByZXR1cm5lZCBDb21waWxlZCwgd2UgY291bGQgaGF2ZSB0aGVuIGNhbGxlZAorICAgIC8vIGNv
bXBsZXRlQW5kU2NoZWR1bGVPU1IoKSBiZWxvdy4gQnV0IHRoYXQgd291bGQgaGF2ZSBtZWFudCB0
aGF0IGl0IGNvdWxkIHRha2UKKyAgICAvLyBsb25nZXIgZm9yIGNvZGUgYmxvY2tzIHRvIGJlIGNv
bXBsZXRlZDogdGhleSB3b3VsZCBvbmx5IGNvbXBsZXRlIHdoZW4gKnRoZWlyKgorICAgIC8vIGV4
ZWN1dGlvbiBjb3VudCB0cmlnZ2VyIGZpcmVkOyBidXQgdGhhdCBjb3VsZCB0YWtlIGEgd2hpbGUg
c2luY2UgdGhlIGZpcmluZyBpcworICAgIC8vIHJhY3kuIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0
IGNvZGUgYmxvY2tzIHRoYXQgbmV2ZXIgcnVuIGFnYWluIGFmdGVyIGJlaW5nCisgICAgLy8gY29t
cGlsZWQgd291bGQgc2l0IG9uIHRoZSB3b3JrbGlzdCB1bnRpbCBuZXh0IEdDLiBUaGF0J3MgZmlu
ZSwgYnV0IGl0J3MKKyAgICAvLyBwcm9iYWJseSBhIHdhc3RlIG9mIG1lbW9yeS4gT3VyIGdvYWwg
aGVyZSBpcyB0byBjb21wbGV0ZSBjb2RlIGJsb2NrcyBhcyBzb29uIGFzCisgICAgLy8gcG9zc2li
bGUgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlIGNoYW5jZXMgb2YgdXMgZXhlY3V0aW5nIGJhc2Vs
aW5lIGNvZGUgYWZ0ZXIKKyAgICAvLyBvcHRpbWl6ZWQgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJs
ZS4KKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAg
ICB2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGU6OkRG
RykpOworCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGluZykg
ewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5T3B0aW1pemVU
b0RGRyIsICgiY29tcGlsaW5nIikpOwogICAgICAgICAvLyBXZSBjYW5ub3QgYmUgaW4gdGhlIHBy
b2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNvIGhhdmUgYW4gb3B0aW1p
emVkCiAgICAgICAgIC8vIHJlcGxhY2VtZW50LgpAQCAtMTk0MCw3ICsxOTI3LDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGltaXplLCBTbG93UGF0aFJldHVyblR5cGUs
IChWTSogdm1Qb2ludGVyLAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG51
bGxwdHIpOwogICAgIH0KIAotICAgIGlmICh3b3JrbGlzdFN0YXRlID09IERGRzo6V29ya2xpc3Q6
OkNvbXBpbGVkKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBp
bGVkKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50IGJ1dCB3ZSBkaWQganVzdCBnZXQgY29tcGlsZWQsIHRoZW4KICAgICAgICAgLy8gdGhlIGNv
bXBpbGF0aW9uIGZhaWxlZCBvciB3YXMgaW52YWxpZGF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGV4
ZWN1dGlvbiBjb3VudAogICAgICAgICAvLyB0aHJlc2hvbGRzIGhhdmUgYWxyZWFkeSBiZWVuIHNl
dCBhcHByb3ByaWF0ZWx5IGJ5CkBAIC0yMDAzLDcgKzE5OTAsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uT3B0aW1pemUsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKFZNKiB2bVBv
aW50ZXIsCiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVC
bG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gREZHOjpjb21waWxlKAotICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBu
dWxscHRyLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICB2bSwgcmVw
bGFjZW1lbnRDb2RlQmxvY2ssIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uTW9kZTo6REZHLCBieXRl
Y29kZUluZGV4LAogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2Q4ODIzZDhmZmMzMzQ0MTA2OTYzMTJjNTIzZmM2MmI0
MDEwMDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
bGFuLmNwcApAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRQbGFuLmgi
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQWJzdHJhY3RTbG90VmlzaXRvci5oIgor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Db21waWxhdGlvblRocmVhZC5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworZXh0ZXJuIFNlY29uZHMgdG90YWxCYXNlbGluZUNvbXBp
bGVUaW1lOworZXh0ZXJuIFNlY29uZHMgdG90YWxERkdDb21waWxlVGltZTsKK2V4dGVybiBTZWNv
bmRzIHRvdGFsRlRMQ29tcGlsZVRpbWU7CitleHRlcm4gU2Vjb25kcyB0b3RhbEZUTERGR0NvbXBp
bGVUaW1lOworZXh0ZXJuIFNlY29uZHMgdG90YWxGVExCM0NvbXBpbGVUaW1lOworCitKSVRQbGFu
OjpKSVRQbGFuKEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICA6IG1fbW9kZShtb2RlKQorICAgICwgbV92bSgmY29kZUJsb2NrLT52bSgpKQorICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworfQorCit2b2lkIEpJVFBsYW46OmNhbmNlbCgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFnZSAhPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKTsK
KyAgICBBU1NFUlQobV92bSk7CisgICAgbV9zdGFnZSA9IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQ7
CisgICAgbV92bSA9IG51bGxwdHI7CisgICAgbV9jb2RlQmxvY2sgPSBudWxscHRyOworfQorCit2
b2lkIEpJVFBsYW46Om5vdGlmeUNvbXBpbGluZygpCit7CisgICAgbV9zdGFnZSA9IEpJVFBsYW5T
dGFnZTo6Q29tcGlsaW5nOworfQorCit2b2lkIEpJVFBsYW46Om5vdGlmeVJlYWR5KCkKK3sKKyAg
ICBtX3N0YWdlID0gSklUUGxhblN0YWdlOjpSZWFkeTsKK30KKworYXV0byBKSVRQbGFuOjp0aWVy
KCkgY29uc3QgLT4gVGllcgoreworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBKSVRD
b21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFRpZXI6OkJhc2VsaW5lOworICAgIGNh
c2UgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKKyAgICAgICAgcmV0dXJuIFRpZXI6OkJh
c2VsaW5lOworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpERkc6CisgICAgICAgIHJldHVy
biBUaWVyOjpERkc7CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAgICBjYXNl
IEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6CisgICAgICAgIHJldHVybiBUaWVy
OjpGVEw7CisgICAgfQorfQorCitKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQorewor
ICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5h
dGl2ZSgpLCBtX21vZGUpOworfQorCitib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKQoreworICAgIGlmIChtX3N0YWdlID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fdm0tPmhlYXAuaXNNYXJrZWQobV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaWYgKG1fc3RhZ2UgPT0gSklUUGxhblN0
YWdlOjpDYW5jZWxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmlzaXRvci5p
c01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSklUUGxhbjo6aXRlcmF0ZUNvZGVC
bG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBGdW5jdGlvbjx2
b2lkKENvZGVCbG9jayopPiYgZnVuYykKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDb21waWxhdGlv
biB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5n
CisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0
aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlz
aXRlZCBkdXJpbmcgR0MuCisgICAgZnVuYyhtX2NvZGVCbG9jayk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgSklUUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkKG1fY29kZUJsb2NrKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBK
SVRQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVwb3J0
Q29tcGlsZVRpbWVzKCkKKyAgICAgICAgfHwgT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGlt
ZXMoKQorICAgICAgICB8fCAobV92bSAmJiBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpOwor
fQorCitib29sIEpJVFBsYW46OnJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpCisgICAgICAgIHx8IChPcHRpb25zOjpy
ZXBvcnRCYXNlbGluZUNvbXBpbGVUaW1lcygpICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkJhc2VsaW5lKQorICAgICAgICB8fCAoT3B0aW9uczo6cmVwb3J0REZHQ29tcGlsZVRpbWVz
KCkgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQorICAgICAgICB8fCAoT3B0
aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwoKSk7Cit9CisKK3ZvaWQgSklU
UGxhbjo6Y29tcGlsZUluVGhyZWFkKEpJVFdvcmtsaXN0VGhyZWFkKiB0aHJlYWQpCit7CisgICAg
bV90aHJlYWQgPSB0aHJlYWQ7CisKKyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKKyAgICBDU3Ry
aW5nIGNvZGVCbG9ja05hbWU7CisgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMo
KSkpCisgICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGlmIChVTkxJ
S0VMWShyZXBvcnRDb21waWxlVGltZXMoKSkpCisgICAgICAgIGNvZGVCbG9ja05hbWUgPSB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKTsKKworICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25T
Y29wZTsKKworICAgIGlmIChERkc6OmxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhtX21vZGUpIHx8IE9w
dGlvbnM6OmxvZ1BoYXNlVGltZXMoKSkKKyAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBp
bGluZyAiLCAqbV9jb2RlQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIsIGluc3RydWN0aW9ucyBz
aXplID0gIiwgbV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSwgIlxuIik7CisKKyAgICBD
b21waWxhdGlvblBhdGggcGF0aCA9IGNvbXBpbGVJblRocmVhZEltcGwoKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKChwYXRoID09IENhbmNlbFBhdGgpID09IChtX3N0YWdlID09IEpJVFBsYW5TdGFn
ZTo6Q2FuY2VsZWQpKTsKKworICAgIE1vbm90b25pY1RpbWUgYWZ0ZXI7CisgICAgaWYgKFVOTElL
RUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKKyAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKKworICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGlt
ZXMoKSkgeworICAgICAgICAgICAgaWYgKGlzRlRMKCkpIHsKKyAgICAgICAgICAgICAgICB0b3Rh
bEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOworICAgICAgICAgICAgICAgIHRvdGFs
RlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlOworICAgICAgICAg
ICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAtIG1fdGltZUJlZm9yZUZUTDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSgpID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFz
ZWxpbmUpCisgICAgICAgICAgICAgICAgdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lICs9IGFmdGVy
IC0gYmVmb3JlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRvdGFsREZHQ29t
cGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3Qg
Y2hhciogcGF0aE5hbWUgPSBudWxscHRyOworICAgIHN3aXRjaCAocGF0aCkgeworICAgIGNhc2Ug
RmFpbFBhdGg6CisgICAgICAgIHBhdGhOYW1lID0gIk4vQSAoZmFpbCkiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJhc2VsaW5lUGF0aDoKKyAgICAgICAgcGF0aE5hbWUgPSAiQmFzZWxpbmUi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERGR1BhdGg6CisgICAgICAgIHBhdGhOYW1lID0g
IkRGRyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlRMUGF0aDoKKyAgICAgICAgcGF0aE5h
bWUgPSAiRlRMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYW5jZWxQYXRoOgorICAgICAg
ICBwYXRoTmFtZSA9ICJDYW5jZWxlZCI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBpZiAobV9jb2RlQmxvY2spIHsgLy8gbV9jb2RlQmxvY2sgd2lsbCBiZSBudWxsIGlm
IHRoZSBjb21waWxhdGlvbiB3YXMgY2FuY2VsbGVkLgorICAgICAgICBpZiAocGF0aCA9PSBGVExQ
YXRoKQorICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImZ0bENv
bXBpbGUiLCAoInRvb2sgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcyAo
REZHOiAiLCAobV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiwgQjM6
ICIsIChhZnRlciAtIG1fdGltZUJlZm9yZUZUTCkubWlsbGlzZWNvbmRzKCksICIpIHdpdGggIiwg
cGF0aE5hbWUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVO
VChtX2NvZGVCbG9jaywgImRmZ0NvbXBpbGUiLCAoInRvb2sgIiwgKGFmdGVyIC0gYmVmb3JlKS5t
aWxsaXNlY29uZHMoKSwgIiBtcyB3aXRoICIsIHBhdGhOYW1lKSk7CisgICAgfQorICAgIGlmIChV
TkxJS0VMWShyZXBvcnRDb21waWxlVGltZXMoKSkpIHsKKyAgICAgICAgZGF0YUxvZygiT3B0aW1p
emVkICIsIGNvZGVCbG9ja05hbWUsICIgdXNpbmcgIiwgbV9tb2RlLCAiIHdpdGggIiwgcGF0aE5h
bWUsICIgaW50byAiLCBjb2RlU2l6ZSgpLCAiIGJ5dGVzIGluICIsIChhZnRlciAtIGJlZm9yZSku
bWlsbGlzZWNvbmRzKCksICIgbXMiKTsKKyAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCAobV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlKS5t
aWxsaXNlY29uZHMoKSwgIiwgQjM6ICIsIChhZnRlciAtIG1fdGltZUJlZm9yZUZUTCkubWlsbGlz
ZWNvbmRzKCksICIpIik7CisgICAgICAgIGRhdGFMb2coIi5cbiIpOworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE4ZGY0YTc0OTYwYjlkZDA4N2JmMzdiNTMx
YjAyNGZhMWExM2I0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUGxhbi5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisj
aW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJKSVRDb21waWxhdGlvbktl
eS5oIgorI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9uTW9kZS5oIgorI2luY2x1ZGUgIkpJVFBsYW5T
dGFnZS5oIgorI2luY2x1ZGUgIlJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCIKKyNpbmNsdWRlIDx3
dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKK2NsYXNz
IENvZGVCbG9jazsKK2NsYXNzIEpJVFdvcmtsaXN0VGhyZWFkOworY2xhc3MgVk07CisKK2NsYXNz
IEpJVFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUUGxhbj4geworcHJvdGVj
dGVkOgorICAgIEpJVFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlLCBDb2RlQmxvY2sqKTsKKworcHVi
bGljOgorICAgIHZpcnR1YWwgfkpJVFBsYW4oKSB7IH0KKworICAgIFZNKiB2bSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm07IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrOyB9CisgICAgSklUV29ya2xpc3RUaHJlYWQqIHRocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkOyB9CisKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorCisgICAgSklUUGxhblN0YWdlIHN0YWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFnZTsgfQorICAgIGJvb2wgaXNGVEwoKSBjb25zdCB7IHJldHVybiA6OkpTQzo6
aXNGVEwobV9tb2RlKTsgfQorCisgICAgZW51bSBjbGFzcyBUaWVyIHsgQmFzZWxpbmUgPSAwLCBE
RkcgPSAxLCBGVEwgPSAyLCBDb3VudCA9IDMgfTsKKyAgICBUaWVyIHRpZXIoKSBjb25zdDsKKwor
ICAgIEpJVENvbXBpbGF0aW9uS2V5IGtleSgpOworCisgICAgdm9pZCBjb21waWxlSW5UaHJlYWQo
SklUV29ya2xpc3RUaHJlYWQqKTsKKworICAgIHZpcnR1YWwgc2l6ZV90IGNvZGVTaXplKCkgY29u
c3QgPSAwOworCisgICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZSgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZUluR0MoKSB7IH0KKworICAgIHZvaWQgbm90aWZ5
Q29tcGlsaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVJlYWR5KCk7CisgICAgdmlydHVh
bCB2b2lkIGNhbmNlbCgpOworCisgICAgdmlydHVhbCBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJhY3RT
bG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgYm9vbCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFi
c3RyYWN0U2xvdFZpc2l0b3ImLCBjb25zdCBGdW5jdGlvbjx2b2lkKENvZGVCbG9jayopPiYpOwor
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNs
b3RWaXNpdG9yJik7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGNvbXB1dGVDb21waWxlVGltZXMo
KSBjb25zdDsKKyAgICBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0OworCisgICAgZW51
bSBDb21waWxhdGlvblBhdGggeyBGYWlsUGF0aCwgQmFzZWxpbmVQYXRoLCBERkdQYXRoLCBGVExQ
YXRoLCBDYW5jZWxQYXRoIH07CisgICAgdmlydHVhbCBDb21waWxhdGlvblBhdGggY29tcGlsZUlu
VGhyZWFkSW1wbCgpID0gMDsKKworICAgIEpJVFBsYW5TdGFnZSBtX3N0YWdlIHsgSklUUGxhblN0
YWdlOjpQcmVwYXJpbmcgfTsKKyAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOworICAgIE1v
bm90b25pY1RpbWUgbV90aW1lQmVmb3JlRlRMOworICAgIFZNKiBtX3ZtOworICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgSklUV29ya2xpc3RUaHJlYWQqIG1fdGhyZWFkIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuU3RhZ2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRiMmZm
NGVmMmNhYmE3ODIwN2U1NzZiZWJmM2I5NzMzNmRhNjgyZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmgKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgSklUUGxhblN0YWdlIHsKKyAgICBQ
cmVwYXJpbmcsCisgICAgQ29tcGlsaW5nLAorICAgIFJlYWR5LAorICAgIENhbmNlbGVkLAorfTsK
KworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2FmZXBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2Fm
ZXBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2Q5ODU5NjhhOGQyNmRmMmY0MDNkODcyNDU0NGEyZDAz
OTU2YzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
YWZlcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpJVFNhZmVwb2ludC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVFBsYW4u
aCIKKyNpbmNsdWRlICJKSVRTY2FubmFibGUuaCIKKyNpbmNsdWRlICJKSVRXb3JrbGlzdFRocmVh
ZC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTYWZl
cG9pbnQ6OlJlc3VsdDo6flJlc3VsdCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV93YXNDaGVj
a2VkKTsKK30KKworYm9vbCBTYWZlcG9pbnQ6OlJlc3VsdDo6ZGlkR2V0Q2FuY2VsbGVkKCkKK3sK
KyAgICBtX3dhc0NoZWNrZWQgPSB0cnVlOworICAgIHJldHVybiBtX2RpZEdldENhbmNlbGxlZDsK
K30KKworU2FmZXBvaW50OjpTYWZlcG9pbnQoSklUUGxhbiYgcGxhbiwgUmVzdWx0JiByZXN1bHQp
CisgICAgOiBtX3ZtKHBsYW4udm0oKSkKKyAgICAsIG1fcGxhbihwbGFuKQorICAgICwgbV9kaWRD
YWxsQmVnaW4oZmFsc2UpCisgICAgLCBtX3Jlc3VsdChyZXN1bHQpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7CisgICAgcmVzdWx0Lm1fd2FzQ2hlY2tlZCA9IGZh
bHNlOworICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IGZhbHNlOworfQorCitTYWZlcG9p
bnQ6On5TYWZlcG9pbnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsK
KyAgICBpZiAoSklUV29ya2xpc3RUaHJlYWQqIHRocmVhZCA9IG1fcGxhbi50aHJlYWQoKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPm1fc2FmZXBvaW50ID09IHRoaXMpOworICAg
ICAgICB0aHJlYWQtPm1fcmlnaHRUb1J1bi5sb2NrKCk7CisgICAgICAgIHRocmVhZC0+bV9zYWZl
cG9pbnQgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBTYWZlcG9pbnQ6OmFkZChTY2FubmFi
bGUqIHNjYW5uYWJsZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOwor
ICAgIG1fc2Nhbm5hYmxlcy5hcHBlbmQoc2Nhbm5hYmxlKTsKK30KKwordm9pZCBTYWZlcG9pbnQ6
OmJlZ2luKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOworICAgIG1f
ZGlkQ2FsbEJlZ2luID0gdHJ1ZTsKKyAgICBpZiAoSklUV29ya2xpc3RUaHJlYWQqIGRhdGEgPSBt
X3BsYW4udGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPm1fc2FmZXBv
aW50KTsKKyAgICAgICAgZGF0YS0+bV9zYWZlcG9pbnQgPSB0aGlzOworICAgICAgICBkYXRhLT5t
X3JpZ2h0VG9SdW4udW5sb2NrRmFpcmx5KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm47
IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQorICAgIAorICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQorICAg
ICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3RlbXBs
YXRlIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Cit0ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KK2Jvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBp
ZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBX
ZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mg
d2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24u
CisgICAgCisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9y
KTsKK30KKwordGVtcGxhdGUgYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3du
VG9CZUxpdmVEdXJpbmdHQyhTbG90VmlzaXRvciYpOworCitib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlQWZ0ZXJHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OworICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBs
ZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2
ZSBhbmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFm
dGVyR0MoKTsKK30KKwordm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2Rp
ZEdldENhbmNlbGxlZCk7IC8vIFdlIGNhbm5vdCBnZXQgY2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ug
c3Vic2VxdWVudCBHQ3Mgd2lsbCB0aGluayB0aGF0IHdlJ3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwg
bm90IGRvIGFueXRoaW5nIHRvIHVzLgorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi5z
dGFnZSgpID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpOworICAgIG1fcmVzdWx0Lm1fZGlkR2V0
Q2FuY2VsbGVkID0gdHJ1ZTsKKyAgICBtX3ZtID0gbnVsbHB0cjsKK30KKworVk0qIFNhZmVwb2lu
dDo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZtOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU2FmZXBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNhZmVwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzMTMwOTcwYjgwNjcxMGIxZDlkZWM4MmUyYWY0MjEw
MWVjZDU5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNhZmVwb2ludC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQp
CisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
SVRQbGFuOworY2xhc3MgU2Nhbm5hYmxlOworY2xhc3MgVk07CisKK2NsYXNzIFNhZmVwb2ludCB7
CitwdWJsaWM6CisgICAgY2xhc3MgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc3Vs
dCgpCisgICAgICAgICAgICA6IG1fZGlkR2V0Q2FuY2VsbGVkKGZhbHNlKQorICAgICAgICAgICAg
LCBtX3dhc0NoZWNrZWQodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB+UmVzdWx0KCk7CisgICAgICAgIAorICAgICAgICBib29sIGRpZEdldENhbmNlbGxlZCgp
OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2FmZXBvaW50
OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2RpZEdldENhbmNlbGxlZDsKKyAgICAgICAgYm9v
bCBtX3dhc0NoZWNrZWQ7CisgICAgfTsKKyAgICAKKyAgICBTYWZlcG9pbnQoSklUUGxhbiYsIFJl
c3VsdCYpOworICAgIH5TYWZlcG9pbnQoKTsKKyAgICAKKyAgICB2b2lkIGFkZChTY2FubmFibGUq
KTsKKyAgICAKKyAgICB2b2lkIGJlZ2luKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNp
dG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZp
c2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKTsKKyAgICB2b2lkIGNh
bmNlbCgpOworICAgIAorICAgIFZNKiB2bSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYg
d2UndmUgYmVlbiBjYW5jZWxsZWQuCisKK3ByaXZhdGU6CisgICAgVk0qIG1fdm07CisgICAgSklU
UGxhbiYgbV9wbGFuOworICAgIFZlY3RvcjxTY2FubmFibGUqPiBtX3NjYW5uYWJsZXM7CisgICAg
Ym9vbCBtX2RpZENhbGxCZWdpbjsKKyAgICBSZXN1bHQmIG1fcmVzdWx0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTY2FubmFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2Nhbm5hYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2NmQ5M2VmMWMzMjkxOTgyYjViNGNh
NzhkMTQyOWY3OWRhNmJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU2Nhbm5hYmxlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7
CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgU2Nhbm5hYmxlIHsKK3B1YmxpYzoKKyAgICBT
Y2FubmFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIH5TY2FubmFibGUoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAppbmRleCBhOTY4OTc0YmQ2YTk4MjNiOTBhYWRjNDRh
NDE0YTUzN2E5MDNjZjdhLi45NzhiZGQ0MWJmYmM4YzI0MDJjMGI4MWFhOTY4ZWNlZmZmY2U4NzJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDI5
NiArMjgsMzI0IEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiSklULmgiCisjaW5j
bHVkZSAiSklUU2FmZXBvaW50LmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgogI2luY2x1ZGUg
PHd0Zi9Db21waWxhdGlvblRocmVhZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSklU
V29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6
OlBsYW4+IHsKLXB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIHsKLSAgICAgICAgbV9qaXQuZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUluVGhyZWFkKCkKLSAgICB7Ci0gICAgICAgIG1faml0LmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgCi0gICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nID0g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZShib29sIG5lZWRzRmVuY2UpCi0g
ICAgewotICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZCgpOwotICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIENv
bXBpbGF0aW9uRmFpbGVkOgotICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwotICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxh
dGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24g
PSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDoKLSAgICAgICAgICAgIGlmIChuZWVkc0ZlbmNlKQotICAgICAgICAgICAgICAgIFdU
Rjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC4iKTsK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
bV9jb2RlQmxvY2spOwotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsg
fQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT52bSgpOyB9Ci0gICAgCi0gICAg
Ym9vbCBpc0ZpbmlzaGVkQ29tcGlsaW5nKCkKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIg
eyBtX2xvY2sgfTsKLSAgICAgICAgcmV0dXJuIG1faXNGaW5pc2hlZENvbXBpbGluZzsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZU9uTWFpblRocmVhZE5vdyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAg
IHsKLSAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7Ci0gICAgICAgIHBsYW4uZmluYWxp
emUoZmFsc2UpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVC
bG9jazsKLSAgICBKSVQgbV9qaXQ7Ci0gICAgTG9jayBtX2xvY2s7Ci0gICAgYm9vbCBtX2lzRmlu
aXNoZWRDb21waWxpbmcgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgSklUV29ya2xpc3Q6OlRocmVh
ZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewotcHVibGljOgotICAgIFRocmVhZChj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKSVRXb3JrbGlzdCYgd29ya2xpc3QpCi0gICAg
ICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwgd29ya2xpc3QubV9sb2NrLCB3b3JrbGlzdC5t
X2NvbmRpdGlvbi5jb3B5UmVmKCkpCi0gICAgICAgICwgbV93b3JrbGlzdCh3b3JrbGlzdCkKLSAg
ICB7Ci0gICAgICAgIG1fd29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKys7Ci0gICAgfQor
SklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0KCkKKyAgICA6IG1fbG9jayhCb3g8VW5jaGVja2VkTG9j
az46OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjpjcmVhdGUoKSkKK3sKKyAgICBtX21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxh
dGlvbnNQZXJUaWVyID0geworICAgICAgICBPcHRpb25zOjpudW1iZXJPZldvcmtsaXN0VGhyZWFk
cygpLAorICAgICAgICBPcHRpb25zOjpudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpLAorICAg
ICAgICBPcHRpb25zOjpudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLAorICAgIH07CiAKLSAg
ICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgZmluYWwKLSAgICB7Ci0jaWYgT1MoTElOVVgpCi0g
ICAgICAgIHJldHVybiAiSklUV29ya2VyIjsKLSNlbHNlCi0gICAgICAgIHJldHVybiAiSklUIFdv
cmtsaXN0IEhlbHBlciBUaHJlYWQiOwotI2VuZGlmCi0gICAgfQotICAgIAotcHJpdmF0ZToKLSAg
ICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbAotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV93b3JrbGlzdC5tX251bUF2YWlsYWJsZVRocmVhZHMpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fd29ya2xpc3QubV9xdWV1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKLSAgICAgICAgCi0gICAgICAgIG1fbXlQ
bGFucyA9IFdURk1vdmUobV93b3JrbGlzdC5tX3F1ZXVlKTsKLSAgICAgICAgbV93b3JrbGlzdC5t
X251bUF2YWlsYWJsZVRocmVhZHMtLTsKLSAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7
Ci0gICAgfQotICAgIAotICAgIFdvcmtSZXN1bHQgd29yaygpIGZpbmFsCi0gICAgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9teVBsYW5zLmlzRW1wdHkoKSk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKFJlZlB0cjxQbGFuPiYgcGxhbiA6IG1fbXlQbGFucykgewotICAgICAgICAgICAgcGxh
bi0+Y29tcGlsZUluVGhyZWFkKCk7Ci0gICAgICAgICAgICBwbGFuID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1haW4gdGhyZWFkIHJl
YWxpemVzIHRoYXQgd2UganVzdCBjb21waWxlZCBzb21ldGhpbmcuIE5vdGlmeWluZwotICAgICAg
ICAgICAgLy8gYSBjb25kaXRpb24gaXMgYmFzaWNhbGx5IGZyZWUgaWYgbm9ib2R5IGlzIHdhaXRp
bmcuCi0gICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07Ci0g
ICAgICAgICAgICBtX3dvcmtsaXN0Lm1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9teVBsYW5zLmNsZWFyKCk7Ci0gICAgICAgIAot
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgIG1f
d29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKys7Ci0gICAgICAgIHJldHVybiBXb3JrUmVz
dWx0OjpDb250aW51ZTsKLSAgICB9CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZXb3JrbGlzdFRocmVh
ZHMoKTsgKytpKQorICAgICAgICBtX3RocmVhZHMuYXBwZW5kKG5ldyBKSVRXb3JrbGlzdFRocmVh
ZChsb2NrZXIsICp0aGlzKSk7Cit9CiAKLSAgICB2b2lkIHRocmVhZERpZFN0YXJ0KCkgZmluYWwK
LSAgICB7Ci0gICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IG1ha2VVbmlxdWU8Q29tcGlsYXRp
b25TY29wZT4oKTsKK0pJVFdvcmtsaXN0Ojp+SklUV29ya2xpc3QoKQoreworICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOworfQorCitzdGF0aWMgSklUV29ya2xpc3QqIHRoZUdsb2JhbEpJ
VFdvcmtsaXN0IHsgbnVsbHB0ciB9OworCitKSVRXb3JrbGlzdCogSklUV29ya2xpc3Q6OmV4aXN0
aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKQoreworICAgIHJldHVybiB0aGVHbG9iYWxKSVRXb3Jr
bGlzdDsKK30KKworSklUV29ya2xpc3QmIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlz
dCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29u
Y2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIGF1dG8qIHdvcmts
aXN0ID0gbmV3IEpJVFdvcmtsaXN0KCk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICAgICAgdGhlR2xvYmFsSklUV29ya2xpc3QgPSB3b3JrbGlzdDsKKyAgICAg
ICAgfSk7CisgICAgcmV0dXJuICp0aGVHbG9iYWxKSVRXb3JrbGlzdDsKK30KKworQ29tcGlsYXRp
b25SZXN1bHQgSklUV29ya2xpc3Q6OmVucXVldWUoUmVmPEpJVFBsYW4+IHBsYW4pCit7CisgICAg
aWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKKyAgICAgICAgcGxhbi0+Y29tcGls
ZUluVGhyZWFkKG51bGxwdHIpOworICAgICAgICByZXR1cm4gcGxhbi0+ZmluYWxpemUoKTsKICAg
ICB9Ci0gICAgCi0gICAgdm9pZCB0aHJlYWRJc1N0b3BwaW5nKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IG51bGxwdHI7CisK
KyAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OworICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
Q29tcGlsYXRpb25RdWV1ZSgpKSB7CisgICAgICAgIGR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxl
KCkpOworICAgICAgICBkYXRhTG9nKCI6IEVucXVldWVpbmcgcGxhbiB0byBvcHRpbWl6ZSAiLCBw
bGFuLT5rZXkoKSwgIlxuIik7CiAgICAgfQorICAgIEFTU0VSVChtX3BsYW5zLmZpbmQocGxhbi0+
a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOworICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtleSgpLCBw
bGFuLmNvcHlSZWYoKSk7CisgICAgbV9xdWV1ZXNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBsYW4t
PnRpZXIoKSldLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKKyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90
aWZ5T25lKGxvY2tlcik7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uRGVmZXJyZWQ7Cit9CiAKLSAg
ICBKSVRXb3JrbGlzdCYgbV93b3JrbGlzdDsKLSAgICBQbGFucyBtX215UGxhbnM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENvbXBpbGF0aW9uU2NvcGU+IG1fY29tcGlsYXRpb25TY29wZTsKLX07Citz
aXplX3QgSklUV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9j
a2VyIHsgKm1fbG9jayB9OworICAgIHJldHVybiBxdWV1ZUxlbmd0aChsb2NrZXIpOworfQogCi1K
SVRXb3JrbGlzdDo6SklUV29ya2xpc3QoKQotICAgIDogbV9sb2NrKEJveDxVbmNoZWNrZWRMb2Nr
Pjo6Y3JlYXRlKCkpCi0gICAgLCBtX2NvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OmNyZWF0ZSgpKQorc2l6ZV90IEpJVFdvcmtsaXN0OjpxdWV1ZUxlbmd0aChjb25zdCBBYnN0cmFj
dExvY2tlciYpIGNvbnN0Cit7CisgICAgc2l6ZV90IHF1ZXVlTGVuZ3RoID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpJVFBsYW46OlRpZXI6
OkNvdW50KTsgKytpKQorICAgICAgICBxdWV1ZUxlbmd0aCArPSBtX3F1ZXVlc1tpXS5zaXplKCk7
CisgICAgcmV0dXJuIHF1ZXVlTGVuZ3RoOworfQorCit2b2lkIEpJVFdvcmtsaXN0OjpzdXNwZW5k
QWxsVGhyZWFkcygpCit7CisgICAgbV9zdXNwZW5zaW9uTG9jay5sb2NrKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV90aHJlYWRzW2ld
LT5tX3JpZ2h0VG9SdW4ubG9jaygpOworfQorCit2b2lkIEpJVFdvcmtsaXN0OjpyZXN1bWVBbGxU
aHJlYWRzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07
KQorICAgICAgICBtX3RocmVhZHNbaV0tPm1fcmlnaHRUb1J1bi51bmxvY2soKTsKKyAgICBtX3N1
c3BlbnNpb25Mb2NrLnVubG9jaygpOworfQorCithdXRvIEpJVFdvcmtsaXN0Ojpjb21waWxhdGlv
blN0YXRlKEpJVENvbXBpbGF0aW9uS2V5IGtleSkgLT4gU3RhdGUKIHsKICAgICBMb2NrZXIgbG9j
a2VyIHsgKm1fbG9jayB9OwotICAgIG1fdGhyZWFkID0gbmV3IFRocmVhZChsb2NrZXIsICp0aGlz
KTsKKyAgICBjb25zdCBhdXRvJiBpdGVyID0gbV9wbGFucy5maW5kKGtleSk7CisgICAgaWYgKGl0
ZXIgPT0gbV9wbGFucy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vdEtub3duOworICAgIHJldHVy
biBpdGVyLT52YWx1ZS0+c3RhZ2UoKSA9PSBKSVRQbGFuU3RhZ2U6OlJlYWR5ID8gQ29tcGlsZWQg
OiBDb21waWxpbmc7CiB9CiAKLUpJVFdvcmtsaXN0Ojp+SklUV29ya2xpc3QoKQorYXV0byBKSVRX
b3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mIHZtLCBKSVRDb21waWxhdGlv
bktleSByZXF1ZXN0ZWRLZXkpIC0+IFN0YXRlCiB7Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworCisgICAgVmVjdG9yPFJlZlB0
cjxKSVRQbGFuPiwgOD4gbXlSZWFkeVBsYW5zOworICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JW
TSh2bSwgbXlSZWFkeVBsYW5zKTsKKworICAgIFN0YXRlIHJlc3VsdGluZ1N0YXRlID0gTm90S25v
d247CisgICAgd2hpbGUgKCFteVJlYWR5UGxhbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0
cjxKSVRQbGFuPiBwbGFuID0gbXlSZWFkeVBsYW5zLnRha2VMYXN0KCk7CisgICAgICAgIEpJVENv
bXBpbGF0aW9uS2V5IGN1cnJlbnRLZXkgPSBwbGFuLT5rZXkoKTsKKworICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCAqdGhpcywgIjogQ29tcGxl
dGluZyAiLCBjdXJyZW50S2V5KTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFn
ZSgpID09IEpJVFBsYW5TdGFnZTo6UmVhZHkpOworCisgICAgICAgIHBsYW4tPmZpbmFsaXplKCk7
CisKKyAgICAgICAgaWYgKGN1cnJlbnRLZXkgPT0gcmVxdWVzdGVkS2V5KQorICAgICAgICAgICAg
cmVzdWx0aW5nU3RhdGUgPSBDb21waWxlZDsKKyAgICB9CisKKyAgICBpZiAoISFyZXF1ZXN0ZWRL
ZXkgJiYgcmVzdWx0aW5nU3RhdGUgPT0gTm90S25vd24pIHsKKyAgICAgICAgTG9ja2VyIGxvY2tl
ciB7ICptX2xvY2sgfTsKKyAgICAgICAgaWYgKG1fcGxhbnMuY29udGFpbnMocmVxdWVzdGVkS2V5
KSkKKyAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29tcGlsaW5nOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHRpbmdTdGF0ZTsKIH0KIAotYm9vbCBKSVRXb3JrbGlzdDo6Y29tcGxldGVB
bGxGb3JWTShWTSYgdm0pCisKK3ZvaWQgSklUV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9y
Vk1BcmVSZWFkeShWTSYgdm0pCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICAvLyBXaGlsZSB3ZSBhcmUgd2FpdGluZyBmb3Ig
dGhlIGNvbXBpbGVyIHRvIGZpbmlzaCwgdGhlIGNvbGxlY3RvciBtaWdodCBoYXZlIGFscmVhZHkg
c3VzcGVuZGVkCisgICAgLy8gdGhlIGNvbXBpbGVyIGFuZCB0aGVuIGl0IHdpbGwgYmUgd2FpdGlu
ZyBmb3IgdXMgdG8gc3RvcC4gVGhhdCdzIGEgZGVhZGxvY2suIFdlIGF2b2lkIHRoYXQKKyAgICAv
LyBkZWFkbG9jayBieSByZWxpbnF1aXNoaW5nIG91ciBoZWFwIGFjY2Vzcywgc28gdGhhdCB0aGUg
Y29sbGVjdG9yIHByZXRlbmRzIHRoYXQgd2UgYXJlIHN0b3BwZWQKKyAgICAvLyBldmVuIGlmIHdl
IGFyZW4ndC4KKyAgICBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlIHJlbGVhc2VIZWFwQWNjZXNzU2Nv
cGUodm0uaGVhcCk7CisKKyAgICAvLyBXYWl0IGZvciBhbGwgb2YgdGhlIHBsYW5zIGZvciB0aGUg
Z2l2ZW4gVk0gdG8gY29tcGxldGUuIFRoZSBpZGVhIGhlcmUKKyAgICAvLyBpcyB0aGF0IHdlIHdh
bnQgYWxsIG9mIHRoZSBjYWxsZXIgVk0ncyBwbGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJl
CisgICAgLy8gYWJvdXQgYW55IG90aGVyIFZNJ3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0
IHRvIHdhaXQgb24gdGhvc2UuCisgICAgLy8gQWZ0ZXIgd2UgcmVsZWFzZSB0aGlzIGxvY2ssIHdl
IGtub3cgdGhhdCBhbHRob3VnaCBvdGhlciBWTXMgbWF5IHN0aWxsCisgICAgLy8gYmUgYWRkaW5n
IHBsYW5zLCBvdXIgVk0gd2lsbCBub3QgYmUuCisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sg
fTsKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7CisgICAg
ICAgIGR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCI6IFdh
aXRpbmcgZm9yIGFsbCBpbiBWTSB0byBjb21wbGV0ZS5cbiIpOworICAgIH0KKwogICAgIGZvciAo
OzspIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMzI+IG15UGxhbnM7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBtX3BsYW5zLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKFJlZlB0cjxQbGFuPiYgcGxhbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCZwbGFuLT52bSgpICE9ICZ2bSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYW4tPmlz
RmluaXNoZWRDb21waWxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZp
bmRVbmZpbmlzaGVkUGxhbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgbXlQbGFucy5hcHBlbmQoV1RGTW92ZShwbGFuKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgcGxhbnMgdGhlbiB3ZSBzaG91bGQg
ZmluYWxpemUgdGhlbSBub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFteVBsYW5zLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBwbGFucywgdGhlbiB3ZSdyZSBlaXRoZXIgZG9u
ZSBvciB3ZSBuZWVkIHRvIHdhaXQsIGRlcGVuZGluZyBvbgotICAgICAgICAgICAgICAgIC8vIHdo
ZXRoZXIgd2UgZm91bmQgc29tZSB1bmZpbmlzaGVkIHBsYW5zLgotICAgICAgICAgICAgICAgIGlm
ICghZGlkRmluZFVuZmluaXNoZWRQbGFuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT53YWl0
KCptX2xvY2spOworICAgICAgICBib29sIGFsbEFyZUNvbXBpbGVkID0gdHJ1ZTsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fcGxhbnMpIHsKKyAgICAgICAgICAgIGlmIChlbnRy
eS52YWx1ZS0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoZW50cnkudmFsdWUtPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpSZWFkeSkgewor
ICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBpbGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFteVBsYW5zLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0g
ICAgICAgIGZpbmFsaXplUGxhbnMobXlQbGFucyk7CisKKyAgICAgICAgaWYgKGFsbEFyZUNvbXBp
bGVkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9wbGFuQ29tcGlsZWQud2FpdCgq
bV9sb2NrKTsKICAgICB9CiB9CiAKLXZvaWQgSklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQordm9p
ZCBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIHsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgUGxhbnMgbXlQbGFuczsKLSAgICB7Ci0gICAgICAg
IExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgIG1fcGxhbnMucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgICAgICBbJl0gKFJlZlB0cjxQbGFuPiYgcGxhbikgewotICAgICAgICAg
ICAgICAgIGlmICgmcGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIXBsYW4tPmlzRmluaXNoZWRDb21waWxpbmco
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIG15
UGxhbnMuYXBwZW5kKFdURk1vdmUocGxhbikpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIGZpbmFsaXplUGxhbnMobXlQbGFu
cyk7CisgICAgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsKKyAgICBjb21wbGV0
ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKLXZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVM
YXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQordm9pZCBKSVRXb3JrbGlzdDo6Y2FuY2VsQWxsUGxhbnNGb3JWTShWTSYgdm0p
CiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKGNvZGVCbG9jay0+dm0oKS5oZWFwKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rKTsKLSAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5tX2RpZEZhaWxKSVRDb21waWxhdGlvbikg
ewotICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7
Ci0gICAgICAgIFBsYW46OmNvbXBpbGVPbk1haW5UaHJlYWROb3coY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOworICAgIHJlbW92ZU1hdGNoaW5n
UGxhbnNGb3JWTSh2bSwgWyZdKEpJVFBsYW4mIHBsYW4pIHsKKyAgICAgICAgcmV0dXJuIHBsYW4u
c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OkNvbXBpbGluZzsKKyAgICB9KTsKKworICAgIHdhaXRV
bnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSh2bSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEpJVFBs
YW4+LCA4PiBteVJlYWR5UGxhbnM7CisgICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBt
eVJlYWR5UGxhbnMpOworfQorCit2b2lkIEpJVFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0m
IHZtKQoreworICAgIHJlbW92ZU1hdGNoaW5nUGxhbnNGb3JWTSh2bSwgWyZdKEpJVFBsYW4mIHBs
YW4pIHsKKyAgICAgICAgaWYgKCFwbGFuLmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBwbGFuLmZpbmFsaXplSW5HQygpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICAvLyBObyBsb2NraW5nIG5lZWRlZCBmb3Ig
dGhpcyBwYXJ0LCBzZWUgY29tbWVudCBpbiB2aXNpdFdlYWtSZWZlcmVuY2VzKCkuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBTYWZlcG9p
bnQqIHNhZmVwb2ludCA9IG1fdGhyZWFkc1tpXS5nZXQoKS0+bV9zYWZlcG9pbnQ7CisgICAgICAg
IGlmICghc2FmZXBvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzYWZl
cG9pbnQtPnZtKCkgIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChz
YWZlcG9pbnQtPmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBzYWZlcG9pbnQtPmNhbmNlbCgpOwogICAgIH0KLSAgICAKLSAgICBjb2RlQmxv
Y2stPmppdFNvb24oKTsKK30KIAordW5zaWduZWQgSklUV29ya2xpc3Q6OnNldE1heGltdW1OdW1i
ZXJPZkNvbmN1cnJlbnRERkdDb21waWxhdGlvbnModW5zaWduZWQgbikKK3sKKyAgICB1bnNpZ25l
ZCBvbGRWYWx1ZSA9IG1fbWF4aW11bU51bWJlck9mQ29uY3VycmVudENvbXBpbGF0aW9uc1BlclRp
ZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpJVFBsYW46OlRpZXI6OkRGRyldOworICAgIG1fbWF4
aW11bU51bWJlck9mQ29uY3VycmVudENvbXBpbGF0aW9uc1BlclRpZXJbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpJVFBsYW46OlRpZXI6OkRGRyldID0gbjsKKyAgICByZXR1cm4gb2xkVmFsdWU7Cit9
CisKK3Vuc2lnbmVkIEpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50RlRM
Q29tcGlsYXRpb25zKHVuc2lnbmVkIG4pCit7CisgICAgdW5zaWduZWQgb2xkVmFsdWUgPSBtX21h
eGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihKSVRQbGFuOjpUaWVyOjpGVEwpXTsKKyAgICBtX21heGltdW1OdW1iZXJPZkNvbmN1
cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpU
aWVyOjpGVEwpXSA9IG47CisgICAgcmV0dXJuIG9sZFZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKSVRXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIFZNKiB2bSA9ICZ2aXNpdG9yLmhlYXAoKS0+dm0oKTsKICAg
ICB7CiAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9wbGFubmVkLmNvbnRhaW5zKGNvZGVCbG9jaykpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7Ci0gICAgICAg
ICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhbj4g
cGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkpOwotICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7Ci0gICAgICAgICAgICBt
X3F1ZXVlLmFwcGVuZChwbGFuKTsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwo
bG9ja2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IG1fcGxhbnMpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+dm0oKSAhPSB2bSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVudHJ5LnZhbHVlLT5jaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICAgICAgfQogICAgIH0KLQotICAg
IC8vIENvbXBpbGluZyBvbiB0aGUgbWFpbiB0aHJlYWQgaWYgdGhlIGhlbHBlciB0aHJlYWQgaXNu
J3QgYXZhaWxhYmxlIGlzIGEgZGVmZW5zZSBhZ2FpbnN0IHRoaXMKLSAgICAvLyBwYXRob2xvZ3k6
Ci0gICAgLy8KLSAgICAvLyAxKSBEbyBzb21ldGhpbmcgdGhhdCBpcyBhbGxvd2VkIHRvIHRha2Ug
YSB3aGlsZSwgbGlrZSBsb2FkIGEgZ2lhbnQgcGllY2Ugb2YgaW5pdGlhbGl6YXRpb24KLSAgICAv
LyAgICBjb2RlLiBUaGlzIHBsYW5zIHRoZSBjb21waWxlIG9mIHRoZSBpbml0IGNvZGUsIGJ1dCBk
b2Vzbid0IGZpbmlzaCBpdC4gSXQgd2lsbCB0YWtlIGEKLSAgICAvLyAgICB3aGlsZS4KLSAgICAv
LwotICAgIC8vIDIpIERvIHNvbWV0aGluZyB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHF1aWNrLiBO
b3cgYWxsIGJhc2VsaW5lIGNvbXBpbGVzLCBhbmQgc28gYWxsIERGRyBhbmQKLSAgICAvLyAgICBG
VEwgY29tcGlsZXMsIG9mIGV2ZXJ5dGhpbmcgaXMgYmxvY2tlZCBvbiB0aGUgbG9uZy1ydW5uaW5n
IGJhc2VsaW5lIGNvbXBpbGUgb2YgdGhhdAotICAgIC8vICAgIGluaXRpYWxpemF0aW9uIGNvZGUu
Ci0gICAgLy8KLSAgICAvLyBUaGUgc2luZ2xlLXRocmVhZGVkIGNvbmN1cnJlbnQgSklUIGhhcyB0
aGlzIHRlbmRlbmN5IHRvIGNvbnZveSBldmVyeXRoaW5nIHdoaWxlIGF0IHRoZSBzYW1lCi0gICAg
Ly8gdGltZSBwb3N0cG9uaW5nIHdoZW4gaXQgaGFwcGVucywgd2hpY2ggbWVhbnMgdGhhdCB0aGUg
Y29udm95IGRlbGF5cyBhcmUgbGVzcyBwcmVkaWN0YWJsZS4KLSAgICAvLyBUaGlzIHdvcmtzIGFy
b3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQs
IHdlIHJldmVydCB0byBtYWluCi0gICAgLy8gdGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2Jh
Ymx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUg
d2UKLSAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46OmNvbXBpbGVPbk1haW5U
aHJlYWROb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAvLyBU
aGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVjYXVzZToKKyAgICAvLyAoMSkgbm8gbmV3
IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFkcy4gSGVuY2UsIGl0IGlzIGltbXV0YWJs
ZSBhbmQgbmVlZHMgbm8gbG9ja3MuCisgICAgLy8gKDIpIEpJVFdvcmtsaXN0VGhyZWFkOjptX3Nh
ZmVwb2ludCBpcyBwcm90ZWN0ZWQgYnkgdGhhdCB0aHJlYWQncyBtX3JpZ2h0VG9SdW4gd2hpY2gg
d2UgbXVzdCBiZQorICAgIC8vICAgICBob2xkaW5nIGhlcmUgYmVjYXVzZSBvZiBhIHByaW9yIGNh
bGwgdG8gc3VzcGVuZEFsbFRocmVhZHMoKS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVh
ZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFNhZmVwb2ludCogc2FmZXBvaW50ID0gbV90aHJl
YWRzW2ldLT5tX3NhZmVwb2ludDsKKyAgICAgICAgaWYgKHNhZmVwb2ludCAmJiBzYWZlcG9pbnQt
PnZtKCkgPT0gdm0pCisgICAgICAgICAgICBzYWZlcG9pbnQtPmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKHZpc2l0b3IpOworICAgIH0KIH0KK3RlbXBsYXRlIHZvaWQgSklUV29ya2xpc3Q6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxhdGUgdm9p
ZCBKSVRXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCi12b2lk
IEpJVFdvcmtsaXN0OjpmaW5hbGl6ZVBsYW5zKFBsYW5zJiBteVBsYW5zKQordm9pZCBKSVRXb3Jr
bGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoUmVmUHRyPFBs
YW4+JiBwbGFuIDogbXlQbGFucykgewotICAgICAgICBwbGFuLT5maW5hbGl6ZSh0cnVlKTsKLSAg
ICAgICAgCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgIG1fcGxh
bm5lZC5yZW1vdmUocGxhbi0+Y29kZUJsb2NrKCkpOwotICAgIH0KKyAgICBMb2NrZXIgbG9ja2Vy
IHsgKm1fbG9jayB9OworICAgIGR1bXAobG9ja2VyLCBvdXQpOwogfQogCi1zdGF0aWMgSklUV29y
a2xpc3QqIHRoZUdsb2JhbEpJVFdvcmtsaXN0IHsgbnVsbHB0ciB9Owordm9pZCBKSVRXb3JrbGlz
dDo6ZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIkpJVFdvcmtsaXN0KCIsIFJhd1BvaW50
ZXIodGhpcyksICIpW1F1ZXVlIExlbmd0aCA9ICIsIHF1ZXVlTGVuZ3RoKGxvY2tlciksCisgICAg
ICAgICIsIE1hcCBTaXplID0gIiwgbV9wbGFucy5zaXplKCksICIsIE51bSBSZWFkeSA9ICIsIG1f
cmVhZHlQbGFucy5zaXplKCksCisgICAgICAgICIsIE51bSBBY3RpdmUgVGhyZWFkcyA9ICIsIG1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzLCAiLyIsIG1fdGhyZWFkcy5zaXplKCksICJdIik7Cit9CiAK
LUpJVFdvcmtsaXN0KiBKSVRXb3JrbGlzdDo6ZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgp
Cit2b2lkIEpJVFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mIHZtLCBWZWN0
b3I8UmVmUHRyPEpJVFBsYW4+LCA4PiYgbXlSZWFkeVBsYW5zKQogewotICAgIHJldHVybiB0aGVH
bG9iYWxKSVRXb3JrbGlzdDsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgTG9j
a2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVh
ZHlQbGFucy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8SklUUGxhbj4gcGxhbiA9IG1f
cmVhZHlQbGFuc1tpXTsKKyAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChwbGFuLT5zdGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6
UmVhZHkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbXlSZWFkeVBsYW5zLmFwcGVu
ZChwbGFuKTsKKyAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5UGxhbnMubGFzdCgp
OworICAgICAgICBtX3JlYWR5UGxhbnMucmVtb3ZlTGFzdCgpOworICAgICAgICBtX3BsYW5zLnJl
bW92ZShwbGFuLT5rZXkoKSk7CisgICAgfQogfQogCi1KSVRXb3JrbGlzdCYgSklUV29ya2xpc3Q6
OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkKK3RlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+
Cit2b2lkIEpJVFdvcmtsaXN0OjpyZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0oVk0mIHZtLCBjb25z
dCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKQogewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlLAotICAgICAgICBbXSB7Ci0g
ICAgICAgICAgICBhdXRvKiB3b3JrbGlzdCA9IG5ldyBKSVRXb3JrbGlzdCgpOwotICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgICAgIHRoZUdsb2JhbEpJVFdvcmts
aXN0ID0gd29ya2xpc3Q7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiAqdGhlR2xvYmFsSklUV29y
a2xpc3Q7CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAgICBIYXNoU2V0PEpJVENv
bXBpbGF0aW9uS2V5PiBkZWFkUGxhbktleXM7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcGxh
bnMpIHsKKyAgICAgICAgSklUUGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOworICAgICAg
ICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aWYgKCFtYXRjaGVzKCpwbGFuKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChwbGFuLT5zdGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpOworICAg
ICAgICBkZWFkUGxhbktleXMuYWRkKHBsYW4tPmtleSgpKTsKKyAgICB9CisgICAgZm9yIChKSVRD
b21waWxhdGlvbktleSBrZXkgOiBkZWFkUGxhbktleXMpCisgICAgICAgIG1fcGxhbnMudGFrZShr
ZXkpLT5jYW5jZWwoKTsKKyAgICBmb3IgKGF1dG8mIHF1ZXVlIDogbV9xdWV1ZXMpIHsKKyAgICAg
ICAgRGVxdWU8UmVmUHRyPEpJVFBsYW4+PiBuZXdRdWV1ZTsKKyAgICAgICAgd2hpbGUgKCFxdWV1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxKSVRQbGFuPiBwbGFuID0gcXVldWUu
dGFrZUZpcnN0KCk7CisgICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBKSVRQbGFuU3Rh
Z2U6OkNhbmNlbGVkKQorICAgICAgICAgICAgICAgIG5ld1F1ZXVlLmFwcGVuZChwbGFuKTsKKyAg
ICAgICAgfQorICAgICAgICBxdWV1ZS5zd2FwKG5ld1F1ZXVlKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVhZHlQbGFucy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9yZWFkeVBsYW5zW2ldLT5zdGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5
UGxhbnMubGFzdCgpOworICAgICAgICBtX3JlYWR5UGxhbnMucmVtb3ZlTGFzdCgpOworICAgIH0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmgKaW5kZXggYTcyYTgzODcwYTAwODJmY2QzNDQ5NTI5MGVhNTBlYTE0MGQ4OWYyZi4uOWM2
YTkwMzhjOWQwOTMwMjY4YmIxOTg3NWI3MmQzZDM0MDMzNzNiMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMCwxNyArMjAsMTcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiQnl0ZWNv
ZGVJbmRleC5oIgotI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKyNpbmNsdWRlICJK
SVRQbGFuLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NSwzNyArNDUsODQgQEAgY2xhc3MgSklU
V29ya2xpc3QgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpJVFdvcmtsaXN0KTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAotICAgIGNsYXNzIFBsYW47Ci0gICAgdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPFBsYW4+LCAzMj4gUGxhbnM7Ci0gICAgCisgICAgZnJpZW5kIGNsYXNzIEpJ
VFdvcmtsaXN0VGhyZWFkOworCiBwdWJsaWM6CiAgICAgfkpJVFdvcmtsaXN0KCk7Ci0gICAgCi0g
ICAgYm9vbCBjb21wbGV0ZUFsbEZvclZNKFZNJik7IC8vIFJldHVybiB0cnVlIGlmIGFueSBKSVQg
d29yayBoYXBwZW5lZC4KLSAgICB2b2lkIHBvbGwoVk0mKTsKLSAgICAKLSAgICB2b2lkIGNvbXBp
bGVMYXRlcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApKTsKLSAgICAKKwogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYg
ZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5n
R2xvYmFsV29ya2xpc3RPck51bGwoKTsKLSAgICAKKworICAgIENvbXBpbGF0aW9uUmVzdWx0IGVu
cXVldWUoUmVmPEpJVFBsYW4+KTsKKyAgICBzaXplX3QgcXVldWVMZW5ndGgoKSBjb25zdDsKKwor
ICAgIHZvaWQgc3VzcGVuZEFsbFRocmVhZHMoKTsKKyAgICB2b2lkIHJlc3VtZUFsbFRocmVhZHMo
KTsKKworICAgIGVudW0gU3RhdGUgeyBOb3RLbm93biwgQ29tcGlsaW5nLCBDb21waWxlZCB9Owor
ICAgIFN0YXRlIGNvbXBpbGF0aW9uU3RhdGUoSklUQ29tcGlsYXRpb25LZXkpOworCisgICAgU3Rh
dGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBKSVRDb21waWxhdGlvbktleSA9IEpJ
VENvbXBpbGF0aW9uS2V5KCkpOworCisgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJl
UmVhZHkoVk0mKTsKKworICAgIC8vIFRoaXMgaXMgZXF1aXZhbGVudCB0bzoKKyAgICAvLyB3b3Jr
bGlzdC0+d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsKKyAgICAvLyB3b3JrbGlz
dC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOworICAgIHZvaWQgY29tcGxldGVBbGxQ
bGFuc0ZvclZNKFZNJik7CisKKyAgICB2b2lkIGNhbmNlbEFsbFBsYW5zRm9yVk0oVk0mKTsKKwor
ICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7CisKKyAgICB1bnNpZ25lZCBzZXRNYXhpbXVt
TnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGlsYXRpb25zKHVuc2lnbmVkKTsKKyAgICB1bnNpZ25l
ZCBzZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50RlRMQ29tcGlsYXRpb25zKHVuc2lnbmVkKTsK
KworICAgIC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5n
IGFsbCB0aHJlYWRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgdm9pZCB2
aXNpdFdlYWtSZWZlcmVuY2VzKFZpc2l0b3ImKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZp
c2l0b3I+CisgICAgdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImLCBWTSYsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBKSVRXb3JrbGlzdCgpOwotICAgIAotICAg
IGNsYXNzIFRocmVhZDsKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFkOwotICAgIAotICAgIHZvaWQg
ZmluYWxpemVQbGFucyhQbGFucyYpOwotICAgIAotICAgIFBsYW5zIG1fcXVldWU7Ci0gICAgUGxh
bnMgbV9wbGFuczsKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fcGxhbm5lZDsKLSAgICAKKwor
ICAgIHNpemVfdCBxdWV1ZUxlbmd0aChjb25zdCBBYnN0cmFjdExvY2tlciYpIGNvbnN0OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KKyAgICB2b2lkIHJlbW92ZU1hdGNo
aW5nUGxhbnNGb3JWTShWTSYsIGNvbnN0IE1hdGNoRnVuY3Rpb24mKTsKKworICAgIHZvaWQgcmVt
b3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxKSVRQbGFuPiwgOD4mKTsK
KworICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJikgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKKyAgICBz
dGQ6OmFycmF5PHVuc2lnbmVkLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEpJVFBsYW46OlRpZXI6OkNv
dW50KT4gbV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllciB7IDAsIDAsIDAgfTsKKyAgICBzdGQ6
OmFycmF5PHVuc2lnbmVkLCBzdGF0aWNfY2FzdDxzaXplX3Q+KEpJVFBsYW46OlRpZXI6OkNvdW50
KT4gbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllcjsKKworICAg
IFZlY3RvcjxSZWZQdHI8SklUV29ya2xpc3RUaHJlYWQ+PiBtX3RocmVhZHM7CisKKyAgICAvLyBV
c2VkIHRvIGluZm9ybSB0aGUgdGhyZWFkIGFib3V0IHdoYXQgd29yayB0aGVyZSBpcyBsZWZ0IHRv
IGRvLgorICAgIHN0ZDo6YXJyYXk8RGVxdWU8UmVmUHRyPEpJVFBsYW4+Piwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fcXVldWVzOworCisgICAgLy8gVXNlZCB0
byBhbnN3ZXIgcXVlc3Rpb25zIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29kZSBibG9j
ay4gVGhpcworICAgIC8vIGlzIHBhcnRpY3VsYXJseSBncmVhdCBmb3IgdGhlIGN0aV9vcHRpbWl6
ZSBPU1Igc2xvdyBwYXRoLCB3aGljaCB3YW50cworICAgIC8vIHRvIGtub3c6IGRpZCBJIGdldCBo
ZXJlIGJlY2F1c2UgYSBiZXR0ZXIgdmVyc2lvbiBvZiBtZSBqdXN0IGdvdAorICAgIC8vIGNvbXBp
bGVkPworICAgIEhhc2hNYXA8SklUQ29tcGlsYXRpb25LZXksIFJlZlB0cjxKSVRQbGFuPj4gbV9w
bGFuczsKKworICAgIC8vIFVzZWQgdG8gcXVpY2tseSBmaW5kIHdoaWNoIHBsYW5zIGhhdmUgYmVl
biBjb21waWxlZCBhbmQgYXJlIHJlYWR5IHRvCisgICAgLy8gYmUgY29tcGxldGVkLgorICAgIFZl
Y3RvcjxSZWZQdHI8SklUUGxhbj4sIDE2PiBtX3JlYWR5UGxhbnM7CisKKyAgICBVbmNoZWNrZWRM
b2NrIG1fc3VzcGVuc2lvbkxvY2s7CiAgICAgQm94PFVuY2hlY2tlZExvY2s+IG1fbG9jazsKLSAg
ICBSZWY8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX2NvbmRpdGlvbjsgLy8gV2UgdXNlIE9u
ZSBUcnVlIENvbmRpdGlvbiBmb3IgZXZlcnl0aGluZyBiZWNhdXNlIHRoYXQncyBlYXNpZXIuCi0g
ICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJlYWQ7Ci0gICAgCi0gICAgdW5zaWduZWQg
bV9udW1BdmFpbGFibGVUaHJlYWRzIHsgMCB9OworCisgICAgUmVmPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CisgICAgVW5jaGVja2VkQ29uZGl0aW9uIG1fcGxhbkNv
bXBpbGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRXb3JrbGlzdElubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzI4ZDYxYjMxOGY3OTQw
ZGMyYzNmMmI4ZmY3NmJmZmQyYWRmZDkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdElubGluZXMuaApAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IEVOQUJMRShKSVQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpJVFdvcmts
aXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29u
c3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7CisgICAgTG9ja2VyIGxvY2tl
ciB7ICptX2xvY2sgfTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wbGFucykgeworICAgICAg
ICBpZiAoZW50cnkudmFsdWUtPnZtKCkgIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGVudHJ5LnZhbHVlLT5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIGZ1bmMp
OworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVh
ZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFkLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lN2M4MDc3ODUwZjM4MWU4M2I2MTllYjllODZmNjBjMmQxN2M0MWFhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVh
ZC5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RU
aHJlYWQuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgor
I2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRXb3JrbGlzdFRo
cmVhZDo6V29ya1Njb3BlIGZpbmFsIHsKK3B1YmxpYzoKKyAgICBXb3JrU2NvcGUoSklUV29ya2xp
c3RUaHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwg
bV90aWVyKHRocmVhZC5tX3BsYW4tPnRpZXIoKSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fdGhyZWFkLm1fcGxhbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFkLm1f
d29ya2xpc3QubV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOworICAgIH0KKworICAgIH5Xb3JrU2Nv
cGUoKQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3RocmVhZC5tX3dvcmtsaXN0
Lm1fbG9jayB9OworICAgICAgICBtX3RocmVhZC5tX3BsYW4gPSBudWxscHRyOworICAgICAgICBt
X3RocmVhZC5tX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CisgICAgICAgIG1f
dGhyZWFkLm1fd29ya2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllcltzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV90aWVyKV0tLTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSklUV29ya2xp
c3RUaHJlYWQmIG1fdGhyZWFkOworICAgIEpJVFBsYW46OlRpZXIgbV90aWVyOworfTsKKworSklU
V29ya2xpc3RUaHJlYWQ6OkpJVFdvcmtsaXN0VGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBs
b2NrZXIsIEpJVFdvcmtsaXN0JiB3b3JrbGlzdCkKKyAgICA6IEF1dG9tYXRpY1RocmVhZChsb2Nr
ZXIsIHdvcmtsaXN0Lm1fbG9jaywgd29ya2xpc3QubV9wbGFuRW5xdWV1ZWQuY29weVJlZigpLCBU
aHJlYWRUeXBlOjpDb21waWxlcikKKyAgICAsIG1fd29ya2xpc3Qod29ya2xpc3QpCit7Cit9Citj
b25zdCBjaGFyKiBKSVRXb3JrbGlzdFRocmVhZDo6bmFtZSgpIGNvbnN0Cit7CisjaWYgT1MoTElO
VVgpCisgICAgcmV0dXJuICJKSVRXb3JrZXIiOworI2Vsc2UKKyAgICByZXR1cm4gIkpJVCBXb3Jr
bGlzdCBIZWxwZXIgVGhyZWFkIjsKKyNlbmRpZgorfQorCithdXRvIEpJVFdvcmtsaXN0VGhyZWFk
Ojpwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIC0+IFBvbGxSZXN1bHQKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpJVFBsYW46
OlRpZXI6OkNvdW50KTsgKytpKSB7CisgICAgICAgIGF1dG8mIHF1ZXVlID0gbV93b3JrbGlzdC5t
X3F1ZXVlc1tpXTsKKyAgICAgICAgaWYgKHF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisKKyAgICAgICAgaWYgKG1fd29ya2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25z
UGVyVGllcltpXSA+PSBtX3dvcmtsaXN0Lm1fbWF4aW11bU51bWJlck9mQ29uY3VycmVudENvbXBp
bGF0aW9uc1BlclRpZXJbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3Bs
YW4gPSBxdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3BsYW4pKSB7
CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgewor
ICAgICAgICAgICAgICAgIG1fd29ya2xpc3QuZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBUaHJlYWQgc2h1dHRpbmcgZG93blxuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKKyAgICAg
ICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFu
U3RhZ2U6OlByZXBhcmluZyk7CisgICAgICAgIG1fd29ya2xpc3QubV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMrKzsKKyAgICAgICAgbV93b3JrbGlzdC5tX29uZ29pbmdDb21waWxhdGlvbnNQZXJUaWVy
W2ldKys7CisgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOworICAgIH0KKworICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpXYWl0OworfQorCithdXRvIEpJVFdvcmtsaXN0VGhyZWFkOjp3b3Jr
KCkgLT4gV29ya1Jlc3VsdAoreworICAgIFdvcmtTY29wZSB3b3JrU2NvcGUoKnRoaXMpOworCisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fcmlnaHRUb1J1biB9OworICAgIHsKKyAgICAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OworICAgICAgICBpZiAobV9wbGFuLT5zdGFn
ZSgpID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICByZXR1cm4gV29ya1Jl
c3VsdDo6Q29udGludWU7CisgICAgICAgIG1fcGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7CisgICAg
fQorCisKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgp
LCBtX3dvcmtsaXN0LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25v
dXNseSIpOworCisgICAgLy8gVGhlcmUncyBubyB3YXkgZm9yIHRoZSBHQyB0byBiZSBzYWZlcG9p
bnRpbmcgc2luY2Ugd2Ugb3duIHJpZ2h0VG9SdW4uCisgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVh
cC53b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBi
dXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFkKHRoaXMpOworICAgIGlm
IChtX3BsYW4tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkgeworICAgICAgICBp
ZiAobV9wbGFuLT52bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coIkhlYXAgaXMgc3RvcHBlZCBidXQgaGVyZSB3ZSBhcmUhICgyKVxuIik7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07CisgICAg
ICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkKKyAgICAg
ICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKworICAgICAgICBtX3BsYW4tPm5v
dGlmeVJlYWR5KCk7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1
ZXVlKCkpIHsKKyAgICAgICAgICAgIG1fd29ya2xpc3QuZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCI6IENvbXBpbGVkICIsIG1fcGxhbi0+a2V5KCks
ICIgYXN5bmNocm9ub3VzbHlcbiIpOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKKyAgICAgICAgbV93b3Jr
bGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKFdURk1vdmUobV9wbGFuKSk7CisgICAgICAgIG1fd29y
a2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdv
cmtSZXN1bHQ6OkNvbnRpbnVlOworfQorCit2b2lkIEpJVFdvcmtsaXN0VGhyZWFkOjp0aHJlYWRE
aWRTdGFydCgpCit7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9u
UXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWQiKTsKKworfQorCit2b2lkIEpJ
VFdvcmtsaXN0VGhyZWFkOjp0aHJlYWRJc1N0b3BwaW5nKGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
K3sKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCBt
X3dvcmtsaXN0LCAiOiBUaHJlYWQgd2lsbCBzdG9wIik7CisgICAgQVNTRVJUKCFtX3BsYW4pOwor
ICAgIG1fcGxhbiA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
V29ya2xpc3RUaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RU
aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNjVlNDcxMDI3OTQ2ZWY4MWY2YjYwYTcwMGJlZmFkMDMzZDFi
YzliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdFRocmVhZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJKSVRQbGFuLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUV29ya2xpc3Q7CitjbGFzcyBTYWZlcG9pbnQ7CisK
K2NsYXNzIEpJVFdvcmtsaXN0VGhyZWFkIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7
CisgICAgY2xhc3MgV29ya1Njb3BlOworCisgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKKyAg
ICBmcmllbmQgY2xhc3MgV29ya1Njb3BlOworICAgIGZyaWVuZCBjbGFzcyBKSVRXb3JrbGlzdDsK
KworcHVibGljOgorICAgIEpJVFdvcmtsaXN0VGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
SklUV29ya2xpc3QmKTsKKworICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBmaW5hbDsKKwor
cHJpdmF0ZToKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5h
bDsKKyAgICBXb3JrUmVzdWx0IHdvcmsoKSBmaW5hbDsKKworICAgIHZvaWQgdGhyZWFkRGlkU3Rh
cnQoKSBmaW5hbDsKKworICAgIHZvaWQgdGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExv
Y2tlciYpIGZpbmFsOworCisgICAgVW5jaGVja2VkTG9jayBtX3JpZ2h0VG9SdW47CisgICAgSklU
V29ya2xpc3QmIG1fd29ya2xpc3Q7CisgICAgUmVmUHRyPEpJVFBsYW4+IG1fcGxhbiB7IG51bGxw
dHIgfTsKKyAgICBTYWZlcG9pbnQqIG1fc2FmZXBvaW50IHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZjdmM2RkMTliMzRlZTRi
NzYxZWYwM2Y3Y2IzN2VhN2Y2ZDMwMTM4Mi4uZTQ0MDU1NzQ2MmUwNDZhMmI1MDg3MGM1ZjNlOTU2
ZjIyZDMzZGRjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTExJbnRTbG93UGF0aHMuaCIK
IAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVFBs
YW4uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCkBAIC0zNzUs
MjMgKzM3NiwyMSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LnBvbGwodm0pOwotICAgIAotICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBlKCkpIHsKLSAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOiB7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdv
cmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0
ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgfHwgd29ya2xpc3RTdGF0ZSA9PSBKSVRXb3JrbGlz
dDo6Q29tcGlsZWQpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CiAgICAgICAgIGNvZGVCbG9jay0+
aml0U29vbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY2FzZSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rOiB7Ci0gICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxX
b3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOworCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6Ok5vdEtub3duKSB7
CisgICAgICAgIFJlZjxCYXNlbGluZUpJVFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJhc2Vs
aW5lSklUUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKKyAgICAg
ICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBs
YW4pKTsKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUOwogICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBkYXRhTG9nKCJVbmV4cGVj
dGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVu
dHJ5T1NSKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQg
a2luZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4
IDcwNzdhZTI4ZWUzNjZiMDg4MWNkOTllMzk1N2IzMzc5MzFlYjJiYTIuLmQ5NDk3ZWJkNGYwYmE2
ZjYyNTc5ZGNkNTQyM2E3Yjk4NDdlOTQ0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtMjQ3LDYgKzI0Nyw3IEBAIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoVW5zaWduZWQsIG1heERGR05vZGVzSW5CYXNp
Y0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzLCAyMDAwMCwgTm9ybWFsLCAiRGlzYWJsZSBwcmVjaXNl
IGJ1dCBjb3N0bHkgYW5hbHlzaXMgYW5kIGdpdmUgY29uc2VydmF0aXZlIHJlc3VsdHMgaWYgdGhl
IG51bWJlciBvZiBERkcgbm9kZXMgaW4gYSBibG9jayBleGNlZWRzIHRoaXMgdGhyZXNob2xkIikg
XAogICAgIFwKICAgICB2KEJvb2wsIHVzZUNvbmN1cnJlbnRKSVQsIHRydWUsIE5vcm1hbCwgImFs
bG93cyB0aGUgREZHIC8gRlRMIGNvbXBpbGF0aW9uIGluIHRocmVhZHMgb3RoZXIgdGhhbiB0aGUg
ZXhlY3V0aW5nIEpTIHRocmVhZCIpIFwKKyAgICB2KFVuc2lnbmVkLCBudW1iZXJPZldvcmtsaXN0
VGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygzLCAyKSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMsIGNvbXB1
dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMywgMikgLSAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KFVuc2lnbmVkLCBudW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9m
V29ya2VyVGhyZWFkcyhNQVhJTVVNX05VTUJFUl9PRl9GVExfQ09NUElMRVJfVEhSRUFEUywgMikg
LSAxLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBwcmlvcml0eURlbHRhT2ZERkdD
b21waWxlclRocmVhZHMsIGNvbXB1dGVQcmlvcml0eURlbHRhT2ZXb3JrZXJUaHJlYWRzKC0xLCAw
KSwgTm9ybWFsLCBudWxscHRyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5k
ZXggODYwODJiMmJlN2NiYTRiNTI2YWE5N2E5ZDM5NGI1OWQ2ODQxZTg0OS4uNjBmOThmNTYzYTc2
ZWRlZGE1MmEwNzI4ODNlNGJhZmViZDcyZGVlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgi
CiAjaW5jbHVkZSAiQ29udHJvbEZsb3dQcm9maWxlci5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRl
clNldHRlci5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRE9NQXR0cmli
dXRlR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAi
RGVidWdnZXJTY29wZS5oIgpAQCAtNjEzLDIwICs2MTIsOCBAQCBWTTo6flZNKCkKICAgICAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGlmIChKSVRXb3JrbGlzdCogd29ya2xpc3QgPSBKSVRXb3JrbGlz
dDo6ZXhpc3RpbmdHbG9iYWxXb3JrbGlzdE9yTnVsbCgpKQotICAgICAgICB3b3JrbGlzdC0+Y29t
cGxldGVBbGxGb3JWTSgqdGhpcyk7CisgICAgICAgIHdvcmtsaXN0LT5jYW5jZWxBbGxQbGFuc0Zv
clZNKCp0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgLy8gTWFrZSBzdXJlIGNvbmN1cnJlbnQgY29tcGlsYXRpb25zIGFyZSBkb25lLCBidXQg
ZG9uJ3QgaW5zdGFsbCB0aGVtLCBzaW5jZSB0aGVyZSBpcwotICAgIC8vIG5vIHBvaW50IHRvIGRv
aW5nIHNvLgotICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsg
aS0tOykgewotICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0
aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkgewotICAgICAgICAgICAgd29ya2xpc3QtPnJl
bW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oKnRoaXMpOwotICAgICAgICAgICAgd29ya2xpc3Qt
PndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSgqdGhpcyk7Ci0gICAgICAgICAgICB3b3Jr
bGlzdC0+cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKCp0aGlzKTsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAKICAgICB3YWl0Rm9yQXN5bmNocm9ub3Vz
RGlzYXNzZW1ibHkoKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429719</attachid>
            <date>2021-05-25 17:50:43 -0700</date>
            <delta_ts>2021-05-26 08:15:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226207-20210525175042.patch</filename>
            <type>text/plain</type>
            <size>251710</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZDFmMDk1NDllNjEzNWY1MWEyMjc5MzMwN2YwMDFhZGE2OTczYmU2Li5jYWZlNDI0MGU3M2VmZmU3
ODVjNGQ4ODdjYjZkZWRhYzIzOGE3NzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMDUtMjQgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgTWVyZ2UgYWxsIHRoZSBKSVQgd29ya2xpc3RzIGludG8gYSBzaGFyZWQg
d29ya2xpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjIwNworCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIERl
bGV0ZSB0aGUgREZHIGFuZCBGVEwgd29ya2xpc3RzIGFuZCByZWZhY3RvciBKSVRXb3JrbGlzdCB0
byBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgIGZvciBhbGwgdGllcnMuIFRoaXMgcmVk
dWNlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbXBpbGVyIHRocmVhZHMgd2hpbGUgYWxsb3dpbmcg
ZWFjaAorICAgICAgICB0aWVyIHRvIHVzZSBtb3JlIHRocmVhZHMgd2hlbmV2ZXIgbmVjZXNzYXJ5
LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGZvciB0aGUKKyAgICAgICAgd29ya2xpc3Qg
dG8gaGF2ZSAzIHRocmVhZHMsIGJhc2VsaW5lIGNhbiB1c2UgdXAgdG8gYWxsIDMgdGhyZWFkcyBh
bmQgREZHIGFuZCBGVEwgZm9sbG93CisgICAgICAgIHRoZSBwcmV2aW91cyBsaW1pdHMgc2V0IHRo
cm91Z2ggSlNDOjpPcHRpb25zLiBSaWdodCBub3csIHRoZSB3b3JrbGlzdCB3aWxsIG9ubHkgZG8g
d29yaworICAgICAgICBvbiB1cHBlciB0aWVycyB3aGVuIGFsbCBsb3dlciB0aWVycyBoYXZlIG5v
IHBlbmRpbmcgdGFza3Mgb3IgaGF2ZSBleGNlZWRlZCB0aGUgbWF4aW11bQorICAgICAgICBudW1i
ZXIgb2YgY29uY3VycmVudCBjb21waWxhdGlvbnMuIGkuZS4gYnkgZGVmYXVsdCB3ZSBvbmx5IERG
RyBjb21waWxlIHdoZW4gdGhlcmUgYXJlCisgICAgICAgIG5vIGJhc2VsaW5lIHRhc2tzIGluIHRo
ZSBxdWV1ZSBhbmQgd2Ugb25seSBGVEwgY29tcGlsZSB3aGVuIHdlIGVpdGhlciBoYXZlIG5vIERG
RyB0YXNrcworICAgICAgICBpbiB0aGUgcXVldWUgT1IgdGhlcmUgYXJlIGFscmVhZHkgMiBERkcg
Y29tcGlsYXRpb25zIGluIHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hp
bmUubW06CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZERkdDb21waWxl
clRocmVhZHM6XSk6CisgICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgc2V0TnVtYmVyT2ZGVExD
b21waWxlclRocmVhZHM6XSk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAg
ICAgIChydW5KSVRUaHJlYWRMaW1pdFRlc3RzKToKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpsb2dDb21waWxhdGlvbkNoYW5nZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OnNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoU2FmZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6dGllclVwQ29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplSW5HQyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5UmVhZHkpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFk
SW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAg
ICAgICAgKiBkZmcvREZHUGxhbklubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRM
Q29tcGlsZS5oOgorICAgICAgICAqIGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpidWlsZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAqIGZ0bC9GVExT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBm
dGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbXBsZXRlQWxsSklUUGxh
bnMpOgorICAgICAgICAoSlNDOjpIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29k
ZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0
RW50cmllcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVQZXJpcGhlcnkpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6cmVzdW1lQ29tcGlsZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL1Jvb3RN
YXJrUmVhc29uLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29k
ZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUaW1lU3RhdHMpOgorICAg
ICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQmFzZWxpbmVQbGFuLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAuCisgICAgICAg
IChKU0M6OkpJVEJhc2VsaW5lUGxhbjo6SklUQmFzZWxpbmVQbGFuKToKKyAgICAgICAgKEpTQzo6
SklUQmFzZWxpbmVQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklU
QmFzZWxpbmVQbGFuOjpjb2RlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVEJhc2VsaW5l
UGxhbjo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9KSVRCYXNlbGluZVBsYW4uaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaC4KKyAgICAgICAg
KiBqaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbktleS5jcHAuCisgICAgICAgIChKU0M6OkpJVENvbXBp
bGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklUQ29tcGlsYXRpb25LZXku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25L
ZXkuaC4KKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENvbXBpbGF0aW9uS2V5
KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yISBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojptb2RlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJ
VENvbXBpbGF0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9u
S2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbk1vZGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlvbk1vZGUu
Y3BwLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBqaXQvSklUQ29t
cGlsYXRpb25Nb2RlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbXBpbGF0aW9uTW9kZS5oLgorICAgICAgICAoSlNDOjppc0ZUTCk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04pOgorICAgICAgICAqIGppdC9KSVRQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpJ
VFBsYW46OkpJVFBsYW4pOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjYW5jZWwpOgorICAgICAg
ICAoSlNDOjpKSVRQbGFuOjpub3RpZnlDb21waWxpbmcpOgorICAgICAgICAoSlNDOjpKSVRQbGFu
Ojpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRpZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRQbGFuOjprZXkpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppc0tub3du
VG9CZUxpdmVBZnRlckdDKToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdD
KToKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpjb21wdXRlQ29tcGlsZVRpbWVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SklUUGxhbjo6cmVwb3J0Q29tcGlsZVRpbWVzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SklUUGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKiBqaXQvSklUUGxhbi5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUUGxhbjo6fkpJVFBsYW4pOgorICAgICAgICAoSlND
OjpKSVRQbGFuOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmNvZGVCbG9jayBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OnRocmVhZCBjb25zdCk6CisgICAgICAgIChK
U0M6OkpJVFBsYW46Om1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRQbGFuOjpzdGFnZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmlzRlRMIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SklUUGxhbjo6ZmluYWxpemVJbkdDKToKKyAgICAgICAgKiBqaXQvSklUUGxhblN0YWdlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3Bw
LgorICAgICAgICAqIGppdC9KSVRTYWZlcG9pbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwLgorICAgICAgICAoSlNDOjpTYWZlcG9p
bnQ6OlNhZmVwb2ludCk6CisgICAgICAgIChKU0M6OlNhZmVwb2ludDo6flNhZmVwb2ludCk6Cisg
ICAgICAgIChKU0M6OlNhZmVwb2ludDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTYWZlcG9pbnQ6
OmNhbmNlbCk6CisgICAgICAgICogaml0L0pJVFNhZmVwb2ludC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaC4KKyAgICAgICAgKiBqaXQvSklU
U2Nhbm5hYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nh
bm5hYmxlLmguCisgICAgICAgICogaml0L0pJVFdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6On5K
SVRXb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdv
cmtsaXN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdv
cmtsaXN0KToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6cXVldWVMZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRX
b3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6
cmVzdW1lQWxsVGhyZWFkcyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21waWxhdGlv
blN0YXRlKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9y
Vk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0pOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6Y2FuY2VsQWxsUGxhbnNGb3JWTSk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAo
SlNDOjpKSVRXb3JrbGlzdDo6c2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudERGR0NvbXBpbGF0
aW9ucyk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25j
dXJyZW50RlRMQ29tcGlsYXRpb25zKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnZpc2l0
V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdDo6cmVtb3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKToKKyAg
ICAgICAgKiBqaXQvSklUV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OnN0
YXRpY19jYXN0PHNpemVfdD4pOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdElubGluZXMuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nhbm5hYmxlLmguCisg
ICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKToKKyAgICAg
ICAgKiBqaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklU
V29ya2xpc3RUaHJlYWQ6OkpJVFdvcmtsaXN0VGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUV29y
a2xpc3RUaHJlYWQ6Om5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRXb3JrbGlzdFRocmVh
ZDo6cG9sbCk6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0VGhyZWFkOjp3b3JrKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZERpZFN0YXJ0KToKKyAgICAgICAgKEpT
Qzo6SklUV29ya2xpc3RUaHJlYWQ6OnRocmVhZElzU3RvcHBpbmcpOgorICAgICAgICAqIGppdC9K
SVRXb3JrbGlzdFRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHJlYWREYXRhLmguCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06On5WTSk6CisKIDIwMjEtMDUtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgVW5jaGVja2VkTG9jayBsZXNzIGluIEphdmFTY3Jp
cHRDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0K
aW5kZXggMGUyNDg5YzIzNzEzYWYxM2QzMWEzNjRkODBiMDA1ZDVjNWU2NmIxZi4uYWQ2ZTUwMGZm
MWJlY2Q2MTBjNDAzMDg4MGYxY2NjNTU1ZmViN2FjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMzAsNyArMzAsNyBAQAogI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKLSNpbXBvcnQgIkRGR1dvcmts
aXN0LmgiCisjaW1wb3J0ICJKSVRXb3JrbGlzdC5oIgogI2ltcG9ydCAiSlNNYW5hZ2VkVmFsdWVJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW1wb3J0
ICJKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIgpAQCAtMjc1LDExICsyNzUsNyBAQCBKU0NvbnRl
eHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICp2
aXJ0dWFsTWFjaGluZSkKICsgKE5TVUludGVnZXIpc2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVh
ZHM6KE5TVUludGVnZXIpbnVtYmVyT2ZUaHJlYWRzCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgSlNDOjpERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IEpTQzo6REZHOjpleGlzdGluZ0dsb2Jh
bERGR1dvcmtsaXN0T3JOdWxsKCk7Ci0gICAgaWYgKHdvcmtsaXN0KQotICAgICAgICByZXR1cm4g
d29ya2xpc3QtPnNldE51bWJlck9mVGhyZWFkcyhudW1iZXJPZlRocmVhZHMsIEpTQzo6T3B0aW9u
czo6cHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJUaHJlYWRzKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIEpTQzo6REZHOjpzZXROdW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcyhudW1iZXJP
ZlRocmVhZHMpOworICAgIHJldHVybiBKU0M6OkpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3Jr
bGlzdCgpLnNldE1heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRERkdDb21waWxhdGlvbnMobnVtYmVy
T2ZUaHJlYWRzKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkBAIC0yODgsMTEgKzI4NCw3IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZp
cnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lKQogKyAoTlNVSW50
ZWdlcilzZXROdW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkczooTlNVSW50ZWdlciludW1iZXJPZlRo
cmVhZHMKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU0M6OkRGRzo6V29ya2xpc3QqIHdv
cmtsaXN0ID0gSlNDOjpERkc6OmV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKTsKLSAg
ICBpZiAod29ya2xpc3QpCi0gICAgICAgIHJldHVybiB3b3JrbGlzdC0+c2V0TnVtYmVyT2ZUaHJl
YWRzKG51bWJlck9mVGhyZWFkcywgSlNDOjpPcHRpb25zOjpwcmlvcml0eURlbHRhT2ZGVExDb21w
aWxlclRocmVhZHMoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gSlNDOjpERkc6OnNldE51
bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKG51bWJlck9mVGhyZWFkcyk7CisgICAgcmV0dXJuIEpT
Qzo6SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuc2V0TWF4aW11bU51bWJlck9m
Q29uY3VycmVudEZUTENvbXBpbGF0aW9ucyhudW1iZXJPZlRocmVhZHMpOwogI2Vsc2UKICAgICBy
ZXR1cm4gMDsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQppbmRleCBmZjQ3ZDYxNDIyOGFjYTA5N2E1YjQ1YjU3OWFm
ZWM1MjkzYjI3MmExLi4xN2MxZTgwZjQ5YjhlNzQ1NTFhMjgxOWU2YTE4ODc4MzA5YTE0MjVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyAr
MjgsNiBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KIAogI2lt
cG9ydCAiQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QuaCIKLSNpbXBvcnQgIkRGR1dv
cmtsaXN0LmgiCiAjaW1wb3J0ICJEYXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgogI2lt
cG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgpAQCAtNTQ5LDE0ICs1NDgsNyBAQCBzdGF0aWMgdm9p
ZCBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCkKICAgICAgICAgY2hlY2tSZXN1bHQoQCJOdW1iZXIg
b2YgRlRMIHRocmVhZHMgc2hvdWxkIGhhdmUgYmVlbiB1cGRhdGVkIiwgdXBkYXRlZE51bWJlck9m
VGhyZWFkcyA9PSB0YXJnZXROdW1iZXJPZlRocmVhZHMpOwogICAgIH07CiAKLSAgICBjaGVja1Jl
c3VsdChAInJ1bkpJVFRocmVhZExpbWl0VGVzdHMoKSBtdXN0IHJ1biBhdCB0aGUgdmVyeSBiZWdp
bm5pbmcgdG8gdGVzdCB0aGUgY2FzZSB3aGVyZSB0aGUgZ2xvYmFsIEpJVCB3b3JrbGlzdCB3YXMg
bm90IGluaXRpYWxpemVkIHlldCIsICFKU0M6OkRGRzo6ZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlz
dE9yTnVsbCgpICYmICFKU0M6OkRGRzo6ZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgp
KTsKLQotICAgIHRlc3RERkcoKTsKLSAgICBKU0M6OkRGRzo6ZW5zdXJlR2xvYmFsREZHV29ya2xp
c3QoKTsKICAgICB0ZXN0REZHKCk7Ci0KLSAgICB0ZXN0RlRMKCk7Ci0gICAgSlNDOjpERkc6OmVu
c3VyZUdsb2JhbEZUTFdvcmtsaXN0KCk7CiAgICAgdGVzdEZUTCgpOwogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDk1MTZj
ZDI4ZjY5ZjE2NWU0MzBlMjFhMWJiNDMyNTY0NDc3Y2ViZWEuLjVkZjY5M2VmZDdkNzAxYTQwNGIy
NTc5YjY1Yzg5YWY4NDg0MGQyNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTYwNCw3ICs2MDQsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogCiAgICAgZGZnL0RGR0NvZGVPcmlnaW5Qb29sLmgKICAgICBkZmcvREZHQ29tbW9u
LmgKLSAgICBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmgKICAgICBkZmcvREZHRG9lc0dDQ2hlY2su
aAogICAgIGRmZy9ERkdNaW5pZmllZElELmgKIApAQCAtNzcxLDYgKzc3MCw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgaml0L0pJVENvZGVNYXAu
aAogICAgIGppdC9KSVRDb21waWxhdGlvbi5oCiAgICAgaml0L0pJVENvbXBpbGF0aW9uRWZmb3J0
LmgKKyAgICBqaXQvSklUQ29tcGlsYXRpb25Nb2RlLmgKICAgICBqaXQvSklUTWF0aElDRm9yd2Fy
ZHMuaAogICAgIGppdC9KSVRPcGVyYXRpb25zLmgKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuaApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYzA4NDBiNjFlMDkzMTZmMzVkZDNjMzcw
YWVkMWFkMzhhY2VkZWE0Li45NDI3NjExMzRkYTFmNjA5NzU3YmI1Yjg3NWFlMjZmYTkxMWFiNTA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY0LDggKzE2NCw2IEBACiAJCTBG
MUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAw
MEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IH07CiAJCTBGMUUzQTY3MTUzQTIx
RTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYg
LyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyB9OwogCQkwRjFGQjM4RjFFMTczQTY3
MDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFGQjM4QjFFMTcz
QTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmgg
Ki87IH07Ci0JCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkIzOTQxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi87IH07Ci0JCTBGMUZCMzk3MUUxQUY3
RTMwMEE5QkU1MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdX
b3JrbGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEYxRkIzOTkxRTFGNjVGQjAwQTlCRTUwIC8qIE11
dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUZCMzk4MUUxRjY1RjkwMEE5QkU1MCAvKiBNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CiAJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAw
Njk4N0M1IC8qIEFib3J0UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMDE3ODAxRENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRl
eGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovOyB9OwpAQCAtMjc2
LDkgKzI3NCw2IEBACiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElE
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUx
MDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IH07CiAJ
CTBGMkZDQ0ZBMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRkNDRjMxOEE2MDA3MDAw
MUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggKi87IH07Ci0JCTBGMkZDQ0ZDMThBNjAwNzAw
MDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y1MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQu
aCAqLzsgfTsKLQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRkNDRjYxOEE2
MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovOyB9OwotCQkwRjJGQ0NGRjE4QTYwMDcw
MDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERh
dGEuaCAqLzsgfTsKIAkJMEYzMDBCNzgxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjc3
MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi87IH07CiAJCTBGMzAwQjdDMThB
QjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAw
QTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi87IH07CiAJCTBGMzBD
QjVFMUZDRTRFMzcwMDRCNTMyMyAvKiBBbGxvY2F0b3JGb3JNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMg
LyogQWxsb2NhdG9yRm9yTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDQsOCArMjk5LDYgQEAKIAkJMEYzNzMwOTExQzBDRDcwQzAwMDUy
QkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOTAxQzBDRDcwQzAwMDUyQkZBIC8q
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzczMDkzMUMwRDY3RUUwMDA1MkJGQSAvKiBB
aXJVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzczMDkyMUMwRDY3RUUwMDA1MkJGQSAvKiBBaXJVc2VDb3VudHMuaCAqLzsgfTsKIAkJ
MEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAxN0NGMDc3RjAwQjE0
NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxh
dGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi87IH07Ci0J
CTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE2MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM4RDJBMjFENDQxOTY4MDA2ODA0OTkgLyogQXV4
aWxpYXJ5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzOEQyQTAxRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM4RDJBMzFE
NDQxOTZEMDA2ODA0OTkgLyogQXV4aWxpYXJ5QmFycmllcklubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhEMkExMUQ0NDE5NjYwMDY4MDQ5
OSAvKiBBdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdP
U1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzOTJDODgxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggKi87IH07CkBA
IC00NTksNyArNDUyLDYgQEAKIAkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2Rl
VXNlRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjg5OEYzMjFCMjc2ODlGMDA4
M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODk4RjMwMUIyNzY4OUYwMDgzQTMz
QyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5oICovOyB9OwogCQkwRjhGMTQz
NDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYxNDMwMUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9j
aC5oICovOyB9OwotCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92
YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4RjE0MzIxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCAqLzsg
fTsKIAkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZUTExpbmsuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk0MTcyRTA0OUUwMDdEQkRB
NSAvKiBGVExMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJC
OTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovOyB9OwogCQkw
RjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4Rjk0M0UxNjY3NjMyRDAwRDYxOTcx
IC8qIENvZGVCbG9ja0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNTkyLDcgKzU4NCw2IEBACiAJCTBGRDhBMzJDMTdENTFGNTcwMENBMkM0
MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUx
RjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oICovOyB9OwogCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0
ZWRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExW
YWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBB
MjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi87IH07CiAJCTBGREIyQ0VBMTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpT
TG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFCMUZBRTYx
RjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5MDEg
LyogSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODMsNiArMTE3
NCwxNSBAQAogCQk3MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
RUMwRUMxMUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwRUNBNjA2MUFG
REJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDExQUZEQkVBMjAwNDQ5
NzM5IC8qIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlT2Jq
ZWN0RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMTMxQkY4MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTY2FubmFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTMxQkY0MjY1ODdF
RjIwMDcxMTRDRiAvKiBKSVRTY2FubmFibGUuaCAqLzsgfTsKKwkJNzIxMzFCRjkyNjU4N0VGMjAw
NzExNENGIC8qIEpJVFNhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxMzFCRjUyNjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5o
ICovOyB9OworCQk3MjEzMUJGQTI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjEzMUJGNjI2NTg3
RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggKi87IH07CisJCTcyMTMxQkZDMjY1ODdFRkEw
MDcxMTRDRiAvKiBKSVRXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTMxQkZCMjY1ODdFRkEwMDcxMTRDRiAvKiBKSVRXb3Jr
bGlzdElubGluZXMuaCAqLzsgfTsKKwkJNzIzOTk4RjcyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2Vs
aW5lSklUUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovOyB9Owor
CQk3MjZCOTFCMDI2NTgxNjUzMDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkI5MUE4MjY1ODE2NTIw
MDhFNkY4MiAvKiBKSVRXb3JrbGlzdFRocmVhZC5oICovOyB9OworCQk3MjZCOTFCMzI2NTgxNjUz
MDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCOTFBQjI2NTgxNjUzMDA4RTZGODIgLyogSklUQ29t
cGlsYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzI2QjkxQjcyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFBsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkI5MUFGMjY1ODE2NTMwMDhF
NkY4MiAvKiBKSVRQbGFuLmggKi87IH07CisJCTcyNkI5MUJBMjY1ODI2M0QwMDhFNkY4MiAvKiBK
SVRDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI2QjkxQjgyNjU4MjYzQzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uS2V5Lmgg
Ki87IH07CiAJCTczMTFGQTMyMjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzMxMUZBMzEy
NDBEQjFEMzAwM0Q0OERCIC8qIERlbGV0ZUJ5SWRWYXJpYW50LmggKi87IH07CiAJCTczNEI2NTU1
MjNGNUMxMDQwMEEwNjlEMSAvKiBEZWxldGVQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczNEI2NTU0MjNGNEEzMzEwMEEwNjlEMSAv
KiBEZWxldGVQcm9wZXJ0eVNsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3M0FEMDYyOTIzRkY2NjI2MDBGNTM1OTMgLyogRGVsZXRlQnlTdGF0
dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDczQUQw
NjI4MjNGRjY2MjYwMEY1MzU5MyAvKiBEZWxldGVCeVN0YXR1cy5oICovOyB9OwpAQCAtMjM2Miw4
ICsyMzYyLDYgQEAKIAkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGQjM4QzFFMTczQTYyMDBBOUJF
NTAgLyogTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEYxRkIzOTQxRTFBRjdERjAwQTlCRTUwIC8qIERGR1BsYW5JbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BsYW5JbmxpbmVzLmg7IHBhdGggPSBkZmcvREZH
UGxhbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxRkIzOTUxRTFB
RjdERjAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlz
dElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkIzOTgxRTFGNjVG
OTAwQTlCRTUwIC8qIE11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTXV0YXRvclNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWJvcnRSZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyMDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbG93SW5kZXhpbmcuY3Bw
OyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTM3LDExICsyNTM1LDYgQEAKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8q
IERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBo
YXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyRkNDRjIxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0dyYXBoU2FmZXBvaW50LmNw
cDsgcGF0aCA9IGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdHcmFwaFNhZmVwb2ludC5oOyBw
YXRoID0gZGZnL0RGR0dyYXBoU2FmZXBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMkZDQ0Y0MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2FmZXBvaW50LmNwcDsgcGF0aCA9IGRm
Zy9ERkdTYWZlcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJGQ0NG
NTE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1NhZmVwb2ludC5oOyBwYXRoID0gZGZnL0RGR1NhZmVwb2ludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJGQ0NGNjE4QTYwMDcwMDAxQTI3RjggLyog
REZHU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NjYW5u
YWJsZS5oOyBwYXRoID0gZGZnL0RGR1NjYW5uYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaHJlYWREYXRhLmNwcDsgcGF0
aCA9IGRmZy9ERkdUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGhyZWFkRGF0YS5oOyBwYXRoID0gZGZnL0RGR1RocmVh
ZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCNzcxOEFCMDUxMTAw
QTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHTm9kZU9yaWdpbi5oOyBwYXRoID0gZGZnL0RGR05vZGVPcmlnaW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdJ
bnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tD
b21iaW5pbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTgyLDEwICsyNTc1LDYgQEAKIAkJ
MEYzNzMwOTIxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJVc2VDb3VudHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJVc2VD
b3VudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAw
QjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVu
dHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTAxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50
cnlwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuaDsgcGF0aCA9IGxsaW50
L0xMSW50RW50cnlwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjM4QjAx
MzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25LZXkuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbXBpbGF0aW9uS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYz
OEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uS2V5Lmg7IHBhdGggPSBkZmcvREZH
Q29tcGlsYXRpb25LZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzOEIwMTUx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuY3BwOyBwYXRoID0gZGZn
L0RGR0NvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MzhCMDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmg7IHBhdGggPSBkZmcv
REZHQ29tcGlsYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhE
MkEwMUQ0NDE5NjYwMDY4MDQ5OSAvKiBBdXhpbGlhcnlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEF1eGlsaWFyeUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzOEQyQTExRDQ0MTk2NjAwNjgwNDk5IC8qIEF1eGlsaWFyeUJhcnJpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1eGlsaWFyeUJhcnJp
ZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzkyQzg3MUI0NjE4
ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0RnV6ei5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdEZ1
enouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgzNSw4ICsyODI0LDYgQEAK
IAkJMEY4OThGMzAxQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludGVnZXJSYW5n
ZU9wdGltaXphdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjE0MkYxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0Vwb2NoLmNwcDsgcGF0aCA9IGRmZy9ERkdFcG9jaC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOEYxNDMwMUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFcG9jaC5oOyBwYXRoID0gZGZn
L0RGR0Vwb2NoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOEYxNDMxMUFERjA5
MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
Lmg7IHBhdGggPSBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGVExMaW5rLmNwcDsgcGF0aCA9IGZ0bC9GVExMaW5rLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZU
TExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTGluay5oOyBwYXRoID0gZnRsL0ZUTExpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDc4LDggKzMwNjUsNiBAQAogCQkwRkQ4QTMy
NDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBkZmcvREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0
ZWRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExBYmJyZXZpYXRlZFR5cGVzLmg7IHBhdGggPSBm
dGwvRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMVmFsdWVGcm9tQmxvY2suaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZyb21CbG9jay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIg
LyogREZHV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHV29ya2xpc3QuY3BwOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dvcmtsaXN0Lmg7IHBhdGgg
PSBkZmcvREZHV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
RTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEpTTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDA2Miw2ICs0MDQ3LDIxIEBACiAJCTcwRUNBNjAwMUFGREJFQTIwMDQ0OTcz
OSAvKiBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAxMUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBs
YXRlT2JqZWN0RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjEzMUJGMzI2NTg3RUYyMDA3MTE0
Q0YgLyogSklUU2FmZXBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVFNhZmVwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMTMx
QkY0MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTY2FubmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUU2Nhbm5hYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU2FmZXBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMTMxQkY2MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRQbGFuU3RhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUUGxhblN0YWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMTMxQkZCMjY1ODdFRkEwMDcxMTRDRiAvKiBKSVRXb3Jr
bGlzdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUV29ya2xp
c3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk5OEY1MjY1REJD
REIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFzZWxpbmVKSVRQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMzk5OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRQbGFuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QjkxQTgyNjU4MTY1MjAwOEU2RjgyIC8qIEpJVFdv
cmtsaXN0VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdvcmts
aXN0VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUFBMjY1ODE2
NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVFBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFB
QjI2NTgxNjUzMDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjZCOTFBQzI2NTgxNjUzMDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJl
YWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUV29ya2xpc3RU
aHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCOTFBRTI2NTgxNjUz
MDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI2QjkxQjgyNjU4MjYzQzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uS2V5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkI5MUI5MjY1ODI2M0MwMDhFNkY4MiAv
KiBKSVRDb21waWxhdGlvbktleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTczMTFGQTMxMjQwREIxRDMwMDNENDhEQiAvKiBEZWxldGVCeUlkVmFyaWFudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZWxldGVCeUlkVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MzExRkEzMzI0MERCMjQ5MDAzRDQ4REIgLyogRGVsZXRlQnlJZFZhcmlhbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGVsZXRlQnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MzE5MEQ5NjI0MDA5MzQ5MDBGODkxQzkgLyogRGVsZXRlQnlTdGF0dXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVsZXRlQnlTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjE5OSw2ICs2MTk5LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBG
MjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBG
MjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywKKwkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKKwkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCiAJCQkJMEY2NEIy
NkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5
RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC02MjQ2LDYgKzYyNDgsMTAg
QEAKIAkJCQk4NkQ0NDZFODI1QjIxMjQ4MDBFQ0FFNzUgLyogSklUQ29tcGlsYXRpb24uY3BwICov
LAogCQkJCTg2RDQ0NkU3MjVCMjEyNDgwMEVDQUU3NSAvKiBKSVRDb21waWxhdGlvbi5oICovLAog
CQkJCTBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICov
LAorCQkJCTcyNkI5MUI5MjY1ODI2M0MwMDhFNkY4MiAvKiBKSVRDb21waWxhdGlvbktleS5jcHAg
Ki8sCisJCQkJNzI2QjkxQjgyNjU4MjYzQzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uS2V5Lmgg
Ki8sCisJCQkJNzI2QjkxQUUyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9kZS5j
cHAgKi8sCisJCQkJNzI2QjkxQUIyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uTW9k
ZS5oICovLAogCQkJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
Y3BwICovLAogCQkJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
aCAqLywKIAkJCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCAqLywKQEAgLTYyNzEsMTAgKzYyNzcsMTYgQEAKIAkJCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIx
NzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCAqLywKIAkJCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MjZCOTFBQTI2NTgxNjUzMDA4RTZGODIgLyog
SklUUGxhbi5jcHAgKi8sCisJCQkJNzI2QjkxQUYyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFBsYW4u
aCAqLywKKwkJCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggKi8s
CiAJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAq
LywKIAkJCQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAgKi8sCiAJCQkJRkUzQTA2QjgxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRH
ZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0EwNkI5MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yLmggKi8sCisJCQkJNzIxMzFCRjMyNjU4N0VGMjAwNzExNENGIC8qIEpJ
VFNhZmVwb2ludC5jcHAgKi8sCisJCQkJNzIxMzFCRjUyNjU4N0VGMjAwNzExNENGIC8qIEpJVFNh
ZmVwb2ludC5oICovLAorCQkJCTcyMTMxQkY0MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTY2FubmFi
bGUuaCAqLywKIAkJCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
Y3BwICovLAogCQkJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5o
ICovLAogCQkJCUZFNDIzODhGMUJFMThDMTIwMDUxNDczNyAvKiBKSVRTdWJHZW5lcmF0b3IuY3Bw
ICovLApAQCAtNjI4NSw2ICs2Mjk3LDkgQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlEQzAxODQx
NzFEMTBDMTg3MDA1N0IwNTMgLyogSklUV29ya2xpc3QuY3BwICovLAogCQkJCURDMDE4NDE4MUQx
MEMxODcwMDU3QjA1MyAvKiBKSVRXb3JrbGlzdC5oICovLAorCQkJCTcyMTMxQkZCMjY1ODdFRkEw
MDcxMTRDRiAvKiBKSVRXb3JrbGlzdElubGluZXMuaCAqLywKKwkJCQk3MjZCOTFBQzI2NTgxNjUz
MDA4RTZGODIgLyogSklUV29ya2xpc3RUaHJlYWQuY3BwICovLAorCQkJCTcyNkI5MUE4MjY1ODE2
NTIwMDhFNkY4MiAvKiBKSVRXb3JrbGlzdFRocmVhZC5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0
OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAogCQkJCTc5MkNCMzQ3MUM0RUVENUMw
MEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8sCiAJCQkJNzkyQ0IzNDgxQzRFRUQ1
QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8sCkBAIC04MTAyLDEwICs4MTE3LDYg
QEAKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8sCiAJCQkJ
MEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwICovLAogCQkJCTBG
RUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8sCi0JCQkJMEYzOEIw
MTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCAqLywKLQkJCQkwRjM4
QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCAqLywKLQkJCQkwRjM4
QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLywKLQkJCQkw
RjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8sCiAJCQkJ
MEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAq
LywKIAkJCQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCAqLywKIAkJCQkwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmNwcCAqLywKQEAgLTgyMDksOCArODIyMCw2IEBACiAJCQkJRTM4NTBCMTQyMjZF
RDYzRTAwOUFCRjlDIC8qIERGR01pbmlmaWVkSURJbmxpbmVzLmggKi8sCiAJCQkJMEYyQkRDNEMx
NTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0Ux
NTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAotCQkJCTBGOEYxNDMxMUFE
RjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCAqLywKLQkJCQkwRjhG
MTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oICovLAogCQkJ
CTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAg
Ki8sCiAJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXRE
YXRhLmggKi8sCiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5oICovLApAQCAtODI1OCw3ICs4MjY3LDYgQEAKIAkJCQkwRjJCOUNERjE5RDBCQTdEMDBCMUQx
QjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlBNzhBOTc3MjE3OTczOEI4MDA5REY3NDQg
LyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMxNzk3MzhCODAwOURGNzQ0IC8qIERGR1Bs
YW4uaCAqLywKLQkJCQkwRjFGQjM5NDFFMUFGN0RGMDBBOUJFNTAgLyogREZHUGxhbklubGluZXMu
aCAqLywKIAkJCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZS5oICovLAogCQkJCTBGQkUwRjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAv
KiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLywKQEAgLTgyNzUsMTEgKzgyODMsOCBA
QAogCQkJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJl
LmggKi8sCiAJCQkJNzk4MEMxNkExRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1
Y3R1cmVTZXQuY3BwICovLAogCQkJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdp
c3RlcmVkU3RydWN0dXJlU2V0LmggKi8sCi0JCQkJMEYyRkNDRjQxOEE2MDA3MDAwMUEyN0Y4IC8q
IERGR1NhZmVwb2ludC5jcHAgKi8sCi0JCQkJMEYyRkNDRjUxOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R1NhZmVwb2ludC5oICovLAogCQkJCUE3N0E0MjNDMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZl
VG9FeGVjdXRlLmggKi8sCiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCi0JCQkJMEYyRkNDRjYxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5MTMyREYyNUEwMDJC
MkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCiAJCQkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLywKIAkJCQkwRjFFM0E1MDE1MzdDMkNC
MDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKQEAgLTgzMDgsOCArODMxMyw2
IEBACiAJCQkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuY3BwICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggKi8sCiAJCQkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovLAotCQkJCTBGMkZDQ0Y3MThBNjAwNzAwMDFBMjdG
OCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLywKLQkJCQkwRjJGQ0NGODE4QTYwMDcwMDAxQTI3Rjgg
LyogREZHVGhyZWFkRGF0YS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBE
RkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVu
a3MuaCAqLywKIAkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAgKi8sCkBAIC04MzQ4LDkgKzgzNTEsNiBAQAogCQkJCTBGRkZDOTU0
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAq
LywKIAkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKLQkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIg
LyogREZHV29ya2xpc3QuY3BwICovLAotCQkJCTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBE
RkdXb3JrbGlzdC5oICovLAotCQkJCTBGMUZCMzk1MUUxQUY3REYwMEE5QkU1MCAvKiBERkdXb3Jr
bGlzdElubGluZXMuaCAqLywKIAkJCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRm
Zy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGRmZzsKQEAgLTkzNzAsNiArOTM3MCw3IEBACiAJ
CQkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTM0MUZDNzIxREFDMzQzQzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0IyMUU2MEFFNDcwMEMxMzgzOSAv
KiBCM1dpZHRoLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM5OThGNzI2NURCQ0RCMDA1Nzg2N0Yg
LyogQmFzZWxpbmVKSVRQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5
MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdC
ODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKQEAgLTk0NTgsNyArOTQ1OSw2IEBACiAJCQkJQkMxOEM0NUUwRTE2
RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYw
MTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRkVGNUI0MjkyNjI4QjUyNDAwMTZFNzc2IC8qIEpTU2V0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzE0MTdENDMy
NkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtOTU3OSw4ICs5
NTc5LDYgQEAKIAkJCQkwRjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZl
bmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMzhCMDE4MTdDRkU3NTUwMEIx
NDREMyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzOEIwMUEx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCQTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3Rh
bnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQ0VFMjIwQjFDRUI5ODk1MDAw
QzIzOTYgLyogREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLApA
QCAtOTYzOSw3ICs5NjM3LDYgQEAKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZH
TWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM4NTBCMTUyMjZFRDY0MTAwOUFCRjlD
IC8qIERGR01pbmlmaWVkSURJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NjE1
MjI4MDIwMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwRTE3OTlFQTJFMDA4MTc1MzMg
LyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNFQTEzMkRFRjFD
MDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjU3LDcgKzk2NTQsNiBA
QAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVGNUI0MjcyNjI4QUJEOTAw
MTZFNzc2IC8qIEpTV2Vha01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVD
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTY2Nyw3ICs5NjYzLDYgQEAKIAkJ
CQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI5Q0VCMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGMUZCMzk2MUUxQUY3RTEwMEE5QkU1MCAvKiBERkdQbGFuSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc1MTZDMURCMEIw
MDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05Njc4LDEwICs5NjczLDggQEAKIAkJCQk4NkVDOURE
MTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFB
MjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJC
RkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQx
MDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdTY2FubmFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFE
NyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUy
MDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTk2OTcsNyArOTY5MCw2IEBACiAJCQkJMEZDMjBDQjYxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZC
MjhDQzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzE3LDggKzk3MDksNiBA
QAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0
MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEZEQjJDRTgxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xp
c3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMg
LyogRGlyZWN0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTEx
MDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyogRGlyZWN0RXZhbENvZGVDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NzUyLDYgKzk3NDIsNyBAQAogCQkJCTE0NzM0MUQyMURDMDJFMkUwMEFBMjlC
QSAvKiBFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBGRkQxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2MDI5RDkxRDZF
MUU0RjAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFRjVCNDMwMjYyQTMzOEIwMDE2RTc3NiAvKiBFeGNlcHRpb25FeHBlY3RhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDAwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBFeGNl
cHRpb25IZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0
RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTc4OCw3ICs5Nzc5LDYg
QEAKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVGNUI0MjMyNjI4QTBFRTAwMTZFNzc2
IC8qIEhhc2hNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDYxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTk4MzIsNyArOTgy
Miw2IEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBG
dW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBRDkxMEQxRENBOTI5NDAw
MTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUY1QjQy
QzI2MjhDQkM4MDAxNkU3NzYgLyogVk1UcmFwc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDA0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDczNDFEODFEQzAyRjk5MDBBQTI5QkEgLyogRnVuY3Rpb25FeGVjdXRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTExLDYgKzk5MDAsNyBA
QAogCQkJCTE0MkUzMTM2MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0NzgyOTdCMTM3OUU4QTgwMEE3QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRUY1QjQyMzI2MjhBMEVFMDAxNkU3NzYgLyogSGFzaE1hcElt
cGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMg
LyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCQTdBOTgxM0FB
REZGODAwNUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxNzdBMURDMjJGOTU4
RDUwMEIzNENBMiAvKiBIZWFwQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwNjIsNiAr
MTAwNTIsOCBAQAogCQkJCUZFNDc2RkY0MjA3RTg1RDUwMDkzQ0EyRCAvKiBKSVRDb2RlTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkQ0NDZFQzI1QjIxMjYwMDBFQ0FFNzUgLyogSklUQ29tcGls
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBK
SVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QjkxQkEyNjU4MjYz
RDAwOEU2RjgyIC8qIEpJVENvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZC
OTFCMzI2NTgxNjUzMDA4RTZGODIgLyogSklUQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTE4N0EwRDFDMDMwRDVDMDAzOEJCQ0EgLyogSklURGl2R2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDA3NywxMiArMTAwNjksMTggQEAKIAkJ
CQk4NkQ0NDZFQTI1QjIxMjUzMDBFQ0FFNzUgLyogSklUT3BhcXVlQnlwcm9kdWN0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNDQTNBNEUyNTI3QUIyRjAwNDgwMkJGIC8qIEpJVE9wZXJhdGlvbkxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCOTFCNzI2NTgxNjUzMDA4RTZGODIg
LyogSklUUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxMzFCRkEyNjU4N0VGMjAwNzExNENG
IC8qIEpJVFBsYW5TdGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QzAxQzExMDQxQTAw
MzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MTMxQkY5MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMTMxQkY4MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTY2FubmFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyog
SklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCURDMDE4NDE5MUQxMEMxODkwMDU3QjA1MyAvKiBKSVRXb3JrbGlzdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIxMzFCRkMyNjU4N0VGQTAwNzExNENGIC8qIEpJVFdvcmtsaXN0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QjkxQjAyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFdvcmts
aXN0VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQwMDkg
LyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUEx
RDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJD
RjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDE4NCw2ICsxMDE4Miw3IEBACiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJD
IC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5
MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RUY1QjQyNTI2MjhBODUwMDAxNkU3NzYgLyogSlNNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQjI4NkQxRUI4RTZENTAwMEVCNUQyIC8qIEpTTWFya2luZ0NvbnN0cmFp
bnRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMg
LyogSlNNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovLApAQCAtMTAyMTksNiArMTAyMTgsNyBAQAog
CQkJCTE0RDAxQTc3MjFGQjM1MUYwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEOUUxN0QxMjgzNzAw
NUY1RkY5IC8qIEpTU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUY1QjQyOTI2MjhCNTI0MDAx
NkU3NzYgLyogSlNTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzkwREQ3MDE4MkY0
OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkRGQ0Iy
QkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMjQ3LDEyICsxMDI0NywxMiBAQAogCQkJCTg2RTNDNjEyMTY3QkFCRDcwMDZENzYwQSAvKiBK
U1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyog
SlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0UxRjhGODIxNTQ3MTVBMDAw
MUREQkMgLyogSlNWYWx1ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFOEMwMzEyMjY0
QTY5MTEwMDFBNDRBRCAvKiBTbG93UGF0aEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAv
KiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTgx
N0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0
MjcyNjI4QUJEOTAwMTZFNzc2IC8qIEpTV2Vha01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vh
a09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkIwMjJBRDND
REMwMDIzRjRDMCAvKiBKU1dlYWtPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1MzEs
NiArMTA1MzEsNyBAQAogCQkJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMDQxNTUzMjUyRUMwNzMwMDkxRUI1RCAv
KiBTbG90VmlzaXRvck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwOUYyRjAxN0EwQUMw
NDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4QzAzMTIy
NjRBNjkxMTAwMUE0NEFEIC8qIFNsb3dQYXRoRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzRjIzQTgyMUVDRjEzRkUwMDk3OEQ5OSAvKiBTbmlwcGV0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTEwNTY4LDcgKzEwNTY5LDYgQEAKIAkJCQlCQ0RFM0FCODBFNkM4
MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTg2OTQzQjFG
OEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdF
NEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRkVGNUI0MjUyNjI4QTg1MDAwMTZFNzc2IC8qIEpTTWFwSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFGNzM4MkQxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVy
ZUlEVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAv
KiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjYxLDYgKzEwNjYxLDcg
QEAKIAkJCQlGRTMwMjJENzFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkY1NkRFMUU2NEVBRDYwMEQxNzgwMSAvKiBWTVRy
YXBzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUY1QjQyQzI2MjhDQkM4MDAxNkU3NzYgLyogVk1U
cmFwc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlE
QiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRTkzMUQ1
QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwNzUzLDcgKzEwNzU0LDYgQEAKIAkJCQlBREU4MDI5QTFFMDhGMURFMDA1OERFNzggLyog
V2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQURF
ODAyOUMxRTA4RjFERTAwNThERTc4IC8qIFdlYkFzc2VtYmx5TGlua0Vycm9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JGNTFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVGNUI0MzAyNjJBMzM4
QjAwMTZFNzc2IC8qIEV4Y2VwdGlvbkV4cGVjdGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MxQTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkY3MURCNThEQUQwMEIzRTczNiAvKiBXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMUIxREI1
OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggM2VlZmEwNGRiNTEzNTUzNWVl
ZmFkZmQ3MzE3NjU0ODEzYTY4NjZjOC4uYmMxY2IzZDljZWQ3MzQ5MTU2NTEwZjdjYmNiY2E5MWQ3
OTc0NWQxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMSw0ICsxLDQgQEAKLS8v
IENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQxLDggKzM0MSw2IEBAIGRm
Zy9ERkdDb2RlT3JpZ2luUG9vbC5jcHAKIGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAogZGZn
L0RGR0NvbW1vbi5jcHAKIGRmZy9ERkdDb21tb25EYXRhLmNwcAotZGZnL0RGR0NvbXBpbGF0aW9u
S2V5LmNwcAotZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5jcHAKIGRmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKIGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwCiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKQEAgLTQxNiw3ICs0MTQsNiBAQCBkZmcvREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAKIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAogZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKIGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAotZGZn
L0RGR1NhZmVwb2ludC5jcHAKIGRmZy9ERkdTbmlwcGV0UGFyYW1zLmNwcAogLy8gVGhlc2UgZmls
ZXMgdGFrZSBhIGxvbmcgdGltZSB0byBjb21waWxlIHNvIHdlIGRvIHRoZW0gaW5kaXZpZHVhbGx5
LgogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBAbm8tdW5pZnkKQEAgLTQyOCw3ICs0MjUsNiBA
QCBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAogZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmNwcAogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKLWRmZy9ERkdUaHJlYWREYXRhLmNw
cAogZGZnL0RGR1RodW5rcy5jcHAKIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAogZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtNDQ4LDcg
KzQ0NCw2IEBAIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAogZGZnL0RGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uY3BwCiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAogZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCi1kZmcvREZHV29ya2xpc3QuY3BwCiAK
IGRpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKIGRpc2Fzc2VtYmxlci9DYXBzdG9u
ZURpc2Fzc2VtYmxlci5jcHAKQEAgLTYyNCw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlTd2l0Y2guY3Bw
CiBqaXQvQ0NhbGxIZWxwZXJzLmNwcAogaml0L0NhY2hlZFJlY292ZXJ5LmNwcApAQCAtNjQ4LDYg
KzY0NCw4IEBAIGppdC9KSVRDYWxsLmNwcAogaml0L0pJVENhbGwzMl82NC5jcHAKIGppdC9KSVRD
b2RlLmNwcAogaml0L0pJVENvbXBpbGF0aW9uLmNwcAoraml0L0pJVENvbXBpbGF0aW9uS2V5LmNw
cAoraml0L0pJVENvbXBpbGF0aW9uTW9kZS5jcHAKIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwCiBq
aXQvSklURGl2R2VuZXJhdG9yLmNwcAogaml0L0pJVEV4Y2VwdGlvbnMuY3BwCkBAIC02NTksMTQg
KzY1NywxNyBAQCBqaXQvSklUT3BhcXVlQnlwcm9kdWN0cy5jcHAKIGppdC9KSVRPcGNvZGVzLmNw
cAogaml0L0pJVE9wY29kZXMzMl82NC5jcHAKIGppdC9KSVRPcGVyYXRpb25zLmNwcAoraml0L0pJ
VFBsYW4uY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKIGppdC9KSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcAoraml0L0pJVFNhZmVw
b2ludC5jcHAKIGppdC9KSVRTdHViUm91dGluZS5jcHAKIGppdC9KSVRTdWJHZW5lcmF0b3IuY3Bw
CiBqaXQvSklUVGh1bmtzLmNwcAogaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAogaml0L0pJVFdvcmtsaXN0LmNwcAoraml0L0pJVFdvcmtsaXN0VGhyZWFkLmNwcAog
aml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAogaml0L1JlZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggNTYzODhhMDZkN2M2MmQ0OGRkNzgwOWI2NDA2ZGFiYTAwNWY4YzkxYy4u
N2RmMDVlMTBiYzkwYjY1NmYzNTAzYzg1YzA1NGM1ZDNhZmE3YzZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQzLDcgKzQzLDYgQEAKICNp
bmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJF
dmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJG
dW5jdGlvbkNvZGVCbG9jay5oIgpAQCAtNTUsNiArNTQsNyBAQAogI2luY2x1ZGUgIklzb0NlbGxT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCisj
aW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCkBAIC0y
NTk4LDkgKzI1OTgsOCBAQCBpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUo
aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6
YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
REZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RP
ck51bGwoKSkgewotICAgICAgICBpZiAod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpD
b21waWxhdGlvbktleSh0aGlzLCBERkc6OkRGR01vZGUpKQotICAgICAgICAgICAgPT0gREZHOjpX
b3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICBpZiAoSklUV29ya2xpc3QqIHdvcmtsaXN0ID0gSklU
V29ya2xpc3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKSkgeworICAgICAgICBpZiAo
d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoSklUQ29tcGlsYXRpb25LZXkodGhpcywgSklUQ29t
cGlsYXRpb25Nb2RlOjpERkcpKSA9PSBKSVRXb3JrbGlzdDo6Q29tcGlsZWQpIHsKICAgICAgICAg
ICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCmluZGV4IDgyYjE0NmRmYjAyZjYzNDVjZmZiNTZjZjZhMDJjNzFhZTIwZDg0NWYuLmNj
ZTc4MmMxZTNjNzgwOTVhYTRmNTc1ZjAxZDJmNjU1YjQzMWJmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC02OTcwLDcgKzY5NzAs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JFbnRyeU1vZGUp
IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpGVExGb3JPU1JFbnRyeSkgewogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2NhdGNoKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgKaW5kZXggYjA0NjE3YzU2MGI2NjcyOGExNWI4MTQwYmU5ZTIzODA4ODA1MTlhNS4uYzY2ZmIy
MjM5ZjhmZDI3ZmE5MWM3YTk3ZTZiNWM2YmI4MTdlOTE4NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkRGR0NvbXBpbGF0aW9uTW9kZS5oIgorI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9uTW9k
ZS5oIgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKQEAgLTY2LDE3ICs2NiwxNyBAQCBlbnVtIFN3
aXRjaEtpbmQgewogICAgIFN3aXRjaENlbGwKIH07CiAKLWlubGluZSBib29sIHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoQ29tcGlsYXRpb25Nb2RlIG1vZGUgPSBERkdNb2RlKQoraW5saW5lIGJv
b2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChKSVRDb21waWxhdGlvbk1vZGUgbW9kZSA9IEpJ
VENvbXBpbGF0aW9uTW9kZTo6REZHKQogewogICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlQ29t
cGlsYXRpb24oKSB8fCBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpIHx8IChpc0ZUTCht
b2RlKSAmJiBPcHRpb25zOjp2ZXJib3NlRlRMQ29tcGlsYXRpb24oKSk7CiB9CiAKLWlubGluZSBi
b29sIGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcyhDb21waWxhdGlvbk1vZGUgbW9kZSA9IERGR01vZGUp
CitpbmxpbmUgYm9vbCBsb2dDb21waWxhdGlvbkNoYW5nZXMoSklUQ29tcGlsYXRpb25Nb2RlIG1v
ZGUgPSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKIHsKICAgICByZXR1cm4gdmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZChtb2RlKSB8fCBPcHRpb25zOjpsb2dDb21waWxhdGlvbkNoYW5nZXMoKTsK
IH0KIAotaW5saW5lIGJvb2wgc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UoQ29tcGlsYXRpb25N
b2RlIG1vZGUpCitpbmxpbmUgYm9vbCBzaG91bGREdW1wR3JhcGhBdEVhY2hQaGFzZShKSVRDb21w
aWxhdGlvbk1vZGUgbW9kZSA9IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogewogICAgIGlmIChp
c0ZUTChtb2RlKSkKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNl
KCkgfHwgT3B0aW9uczo6ZHVtcERGR0ZUTEdyYXBoQXRFYWNoUGhhc2UoKTsKQEAgLTM1OSw3ICsz
NTksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDYXBhYmlsaXR5
TGV2ZWwgYSwgQ2FwYWJpbGl0eUxldmVsIGIpCiB9CiAKIC8vIFVuY29uZGl0aW9uYWxseSBkaXNh
YmxlIERGRyBkaXNhc3NlbWJseSBzdXBwb3J0IGlmIHRoZSBERkcgaXMgbm90IGNvbXBpbGVkIGlu
LgotaW5saW5lIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KENvbXBpbGF0aW9uTW9kZSBtb2Rl
ID0gREZHTW9kZSkKK2lubGluZSBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseShKSVRDb21waWxh
dGlvbk1vZGUgbW9kZSA9IEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogewogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25z
OjpkdW1wREZHRGlzYXNzZW1ibHkoKSB8fCAoaXNGVEwobW9kZSkgJiYgT3B0aW9uczo6ZHVtcEZU
TERpc2Fzc2VtYmx5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21waWxhdGlvbktleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBp
bGF0aW9uS2V5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0MTZmZmJlYTI4
ZjFhZDMyYjM0NjFjNTg0Yjk3MjAxN2FiMGRhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0
aW9uS2V5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkRGR0NvbXBpbGF0aW9uS2V5LmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7Ci0KLXZvaWQgQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LXsKLSAgICBpZiAoISp0aGlzKSB7Ci0gICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJv
ZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21waWxhdGlvbktleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21waWxhdGlvbktleS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDQ2ZjVlZGEz
OWEwNjc1MzdjNmM4MGU5MTJjNGNhNmQyMzgxNzI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGls
YXRpb25LZXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0
OwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgQ29tcGlsYXRpb25LZXkgewotcHVibGljOgot
ICAgIENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikK
LSAgICAgICAgLCBtX21vZGUoSW52YWxpZENvbXBpbGF0aW9uTW9kZSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
LSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKLSAgICAgICAgLCBtX21vZGUoREZH
TW9kZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvbXBpbGF0aW9uS2V5KENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAgIDogbV9wcm9maWxl
ZEJsb2NrKHByb2ZpbGVkQmxvY2spCi0gICAgICAgICwgbV9tb2RlKG1vZGUpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSW52YWxpZENvbXBpbGF0aW9uTW9kZTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSW52YWxp
ZENvbXBpbGF0aW9uTW9kZTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9Ci0gICAgQ29tcGlsYXRpb25N
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICAKLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29tcGlsYXRpb25LZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3Byb2ZpbGVkQmxvY2sKLSAgICAgICAg
ICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RG
OjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIG1fbW9kZSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwotICAgIENvbXBpbGF0aW9uTW9kZSBt
X21vZGU7Ci19OwotCi1zdHJ1Y3QgQ29tcGlsYXRpb25LZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBDb21waWxhdGlvbktleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29tcGlsYXRpb25LZXkmIGEsIGNvbnN0
IENvbXBpbGF0aW9uS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpERkc6OkNvbXBpbGF0aW9uS2V5PiA6IEpTQzo6REZHOjpDb21waWxhdGlvbktleUhh
c2ggeyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkNvbXBpbGF0aW9uS2V5PiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6Q29tcGlsYXRpb25LZXk+IHsgfTsKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bXBpbGF0aW9uTW9kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0
aW9uTW9kZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZDk1MzMxY2Q4MTE3
MTJmMDY3MDg0NTM3N2M5YmY0OGFlODlhYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21waWxhdGlv
bk1vZGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiREZHQ29tcGlsYXRpb25Nb2RlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKLQotdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIHN3
aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW52YWxpZENvbXBpbGF0aW9uTW9kZToKLSAgICAgICAg
b3V0LnByaW50KCJJbnZhbGlkQ29tcGlsYXRpb25Nb2RlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIERGR01vZGU6Ci0gICAgICAgIG91dC5wcmludCgiREZHTW9kZSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBGVExNb2RlOgotICAgICAgICBvdXQucHJpbnQoIkZUTE1vZGUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgotICAgICAgICBv
dXQucHJpbnQoIkZUTEZvck9TUkVudHJ5TW9kZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
cGlsYXRpb25Nb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbXBpbGF0aW9u
TW9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzhhODM5MTU1ZTdjNGIwYjlk
OTY4NjJhYTJkNDg0N2QxNTlmY2FhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tcGlsYXRpb25Nb2Rl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotZW51bSBD
b21waWxhdGlvbk1vZGUgewotICAgIEludmFsaWRDb21waWxhdGlvbk1vZGUsCi0gICAgREZHTW9k
ZSwKLSAgICBGVExNb2RlLAotICAgIEZUTEZvck9TUkVudHJ5TW9kZQotfTsKLQotaW5saW5lIGJv
b2wgaXNGVEwoQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0g
ICAgY2FzZSBGVExNb2RlOgotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6Q29tcGlsYXRpb25Nb2RlKTsK
LQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAKaW5kZXggZTMzMGM2MGYxMTE0NzhkMzc0MDVhMjhiMzhjZjQ2MGJhNmRhNzU2ZC4uNmQ1YTQ0
MDk4MjI3YjU5NTVkODI1OGQyNGVlYmRhOGMyODUxZDhkZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25BbGxvd2xpc3QuaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVBy
b2ZpbGVyTG9nLmgiCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBGdW5jdGlvbkFsbG93bGlzdCYg
ZW5zdXJlR2xvYmFsREZHQWxsb3dsaXN0KCkKIH0KIAogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGVJbXBsKAotICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9j
ayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAorICAgIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLAogICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVW
YWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKQEAgLTg1LDIwICs4NSwxMyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgICAgICpuZXcgUGxhbihjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBt
b2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsKIAogICAgIHBs
YW4tPnNldENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICBpZiAoT3B0aW9uczo6dXNl
Q29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFdvcmtsaXN0JiB3b3JrbGlzdCA9IGVuc3VyZUds
b2JhbFdvcmtsaXN0Rm9yKG1vZGUpOwotICAgICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2Vz
KG1vZGUpKQotICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIERGRyBjb21waWxhdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiIHdpdGggcXVldWUgbGVuZ3RoICIsIHdvcmtsaXN0LnF1ZXVlTGVu
Z3RoKCksICIuXG4iKTsKLSAgICAgICAgd29ya2xpc3QuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsK
LSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRGVmZXJyZWQ7Ci0gICAgfQotICAgIAotICAgIHBs
YW4tPmNvbXBpbGVJblRocmVhZChudWxscHRyKTsKLSAgICByZXR1cm4gcGxhbi0+ZmluYWxpemVX
aXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKTsKKyAgICBKSVRXb3JrbGlzdCYgd29ya2xpc3QgPSBK
SVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKKyAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp1c2VDb25jdXJyZW50SklUKCkgJiYgbG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1vZGUpLCAi
RGVmZXJyaW5nIERGRyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIHdpdGggcXVldWUg
bGVuZ3RoICIsIHdvcmtsaXN0LnF1ZXVlTGVuZ3RoKCksICIuXG4iKTsKKyAgICByZXR1cm4gd29y
a2xpc3QuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKIH0KICNlbHNlIC8vIEVOQUJMRShERkdfSklU
KQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIFZNJiwgQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4LCBjb25zdCBP
cGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAorICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiwgSklUQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4mLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
JiYpCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTA2LDE1ICs5OSwxMyBA
QCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGls
YXRpb25Nb2RlIG1vZGUsCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJs
b2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUsCiAgICAg
Qnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlv
bmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKICAgICBSZWY8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IGNvbXBpbGVJbXBsKAogICAgICAgICB2bSwgY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVC
bG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzLAogICAg
ICAgICBjYWxsYmFjay5jb3B5UmVmKCkpOwotICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25E
ZWZlcnJlZCkKLSAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJs
b2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAppbmRleCBjN2JhN2Y2YWM3N2Vk
YjZkMzhkYTFiY2JmYTRmZmZjMWQ3NDg1OWRjLi4yYTFjOWMxMDE3ZTJjNTNlMjkyYzBjM2Y5OTli
ZmYwNDE3ZTJkODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NSw3ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiREZHQ29tcGlsYXRpb25N
b2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDcg
KzQwLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCk7
CiAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdlIGRvIGEgY29uY3VycmVudCBjb21w
aWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwogLy8gY29tcGlsZS4gRXZlbiBpZiB3
ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhl
IHJlc3VsdC4KIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgVk0mLCBDb2RlQmxvY2sq
LCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUsCisgICAg
Vk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbk1vZGUsCiAgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKICAgICBS
ZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiYmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCmluZGV4IGQyYmQ4OTdkNGY4NDVjNjg2ODU4NmRhZjJiYmM3NDkxYTM4YTE4
ZDkuLjliNjg0ZWUzMGU0ZGM1ZDJiOThkYTk4YzZjMjk4MWU2N2FlMjFhYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJERkdO
b2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1Byb3BlcnR5VHlwZUtl
eS5oIgotI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxp
dmVuZXNzLmgiCisjaW5jbHVkZSAiSklUU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaFNhZmVwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aFNhZmVwb2ludC5oCmluZGV4IGY1N2YyNDYwNGMwZDM1NjJjOTQ3OGRkNzgyOTQ0ZDczYzkyYjll
YzEuLmY1YTZmZDZmMjA2YjJjZDNkMDRlZGRhNWM3N2E1MTM4M2U1ODYzYWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGhTYWZlcG9pbnQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKKyNpbmNs
dWRlICJKSVRTYWZlcG9pbnQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAppbmRleCA0ODVjNzc0N2JhNDAxNDE4Yzk2MjdhNGQ4
MzQ0ZDdiMjM3YWMxYmZjLi41YjJmYzA1ZmYxOGQyYWMzM2MzY2Y4YTYwNWRhNjEzYTJjOGMzODY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBhdCBsZWFzdCBz
b21lIHZhbGlkYXRpb24gd2hlbiBPU1IgZW50ZXJpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU1MTEKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fcGxhbi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9IEpJVENvbXBpbGF0aW9uTW9k
ZTo6RlRMRm9yT1NSRW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF2YWlsYWJpbGl0eU1hcC5tX2xvY2Fscy5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFi
aWxpdHlNYXAubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCA4ZWFlODFmNDk1YWRkODhk
M2ZhNzNlZGE4MmFlNWRiNDZkNzMyNGIzLi4zYjEwODNmNjE4MWI1N2Q5N2M5ZTlmZmZiY2U3Y2Fk
N2UxODE0OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gSklUQ29tcGlsYXRpb25Nb2Rl
OjpGVExGb3JPU1JFbnRyeSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGUxODE3YTFjYzFlOTM1NGQ0YjI1
ZjlmYjA1YmE1MGU2NWVhMzQzNmEuLmUzMzY5OGU4ZTY1MWEzNjkzMTQ5YmMwODI5YzU2MzliYmRj
NTMxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIkRGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkRlZmluZVByb3Bl
cnR5QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgpAQCAtNDQsNiAr
NDMsNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkhhc093blByb3Bl
cnR5Q2FjaGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpJVFdvcmts
aXN0LmgiCiAjaW5jbHVkZSAiSlNBcnJheUlubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yLmgiCkBAIC0zNzAxLDE0ICszNzAx
LDEwIEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKLSAgICBpZiAoV29ya2xpc3Qq
IHdvcmtsaXN0ID0gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpKSB7Ci0gICAgICAg
IHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0g
ICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KSwgRlRMTW9kZSkpOwotICAgIH0gZWxzZQotICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xp
c3Q6Ok5vdEtub3duOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklU
V29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0oCisgICAgICAgIHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpLCBKSVRDb21waWxhdGlvbk1vZGU6OkZUTCkpOwogICAgIAotICAgIGlmICh3b3JrbGlz
dFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9
PSBKSVRXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwgKCJzdGlsbCBjb21waWxpbmciKSk7CiAgICAg
ICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJl
c3VsdCgKICAgICAgICAgICAgIGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CkBAIC0z
NzIzLDcgKzM3MTksNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyRlRMUmVwbGFjZW1lbnRDb21waWxl
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGVk
KSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7CiAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwg
KCJjb21waWxlZCBhbmQgZmFpbGVkIikpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ug
ZmluaXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUK
ICAgICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgpAQCAtMzcz
NCw3ICszNzMwLDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZShW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgogICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50IiwgKCkpOwogICAgIC8vIFdl
IG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICB2bSwgY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVjb2RlSW5k
ZXgoKSwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk1vZGU6OkZUTCwgQnl0ZWNvZGVJbmRleCgpLAogICAgICAgICBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNyZWF0ZSgpKTsKIAogICAgIC8vIElmIHdlIHJlYWNoZWQgaGVyZSwgdGhlIGNvdW50ZXIg
aGFzIG5vdCBiZSByZXNldC4gRG8gdGhhdCBub3cuCkBAIC0zNzkwLDEyICszNzg2LDggQEAgc3Rh
dGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBCeXRl
Y29kZUluZGV4IG9yaWdpbkJ5dGUKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAKICAgICAvLyBSZXNvbHZlIGFueSBwZW5kaW5nIHBsYW4gZm9yIE9T
UiBFbnRlciBvbiB0aGlzIGZ1bmN0aW9uLgotICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlOwotICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSBleGlzdGluZ0dsb2JhbEZUTFdvcmts
aXN0T3JOdWxsKCkpIHsKLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0
ZUFsbFJlYWR5UGxhbnNGb3JWTSgKLSAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICBKSVRX
b3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxX
b3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICB2bSwgSklUQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgSklUQ29tcGlsYXRpb25N
b2RlOjpGVExGb3JPU1JFbnRyeSkpOwogCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKQEAgLTM4MjMsNyArMzgxNSw3IEBAIHN0YXRpYyBj
aGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQnl0ZWNvZGVJ
bmRleCBvcmlnaW5CeXRlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklU
V29ya2xpc3Q6OkNvbXBpbGluZykgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVC
bG9jaywgImRlbGF5RlRMQ29tcGlsZSIsICgic3RpbGwgY29tcGlsaW5nIikpOwogICAgICAgICBq
aXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
Y29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0zODc0LDcgKzM4NjYsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggb3JpZ2luQnl0ZQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGVkKSB7
CisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7CiAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlGVExDb21waWxlIiwgKCJj
b21waWxlZCBhbmQgZmFpbGVkIikpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgY29tcGls
YXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUgdGhyZXNob2xkcy4KICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ29kZSBibG9jayAiLCAqY29kZUJs
b2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudC4iKTsKQEAgLTM5ODUsNyArMzk3Nyw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21t
b24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQnl0ZWNvZGVJbmRleCBvcmlnaW5CeXRl
CiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAo
KSk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKAotICAg
ICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlN
b2RlLCBvcmlnaW5CeXRlY29kZUluZGV4LAorICAgICAgICB2bSwgcmVwbGFjZW1lbnRDb2RlQmxv
Y2ssIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeSwgb3JpZ2lu
Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKHRyaWdnZXJBZGRyZXNzKSk7CiAK
ICAgICBpZiAoaml0Q29kZS0+bmV2ZXJFeGVjdXRlZEVudHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKaW5kZXggOTc0YTMxMGM3ZWNmNzc1ZjBjOTFjYjQ3ZjAzMWI1MTQwNjg0
NTEzZS4uYzRjODI4ZjRmZjFkOWNhNDY1MWEzNzZjYWRlMmQwMmQ1ZWI1OTA2OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC04OCwxNSArODgsNiBAQAogI2luY2x1ZGUg
IkZUTFN0YXRlLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIEpTQyB7Ci0KLWV4dGVybiBTZWNvbmRz
IHRvdGFsREZHQ29tcGlsZVRpbWU7Ci1leHRlcm4gU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1l
OwotZXh0ZXJuIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKLWV4dGVybiBTZWNvbmRz
IHRvdGFsRlRMQjNDb21waWxlVGltZTsKLQotfQotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTMsMTcgKzEwNCwxOCBAQCB2b2lkIGR1bXBBbmRW
ZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9yY2VEdW1w
ID0gZmFsc2UpCiAgICAgICAgIHZhbGlkYXRlKGdyYXBoLCBtb2RlRm9yRmluYWxWYWxpZGF0ZSk7
CiB9CiAKLVByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJvZmlsZXJDb21waWxhdGlvbktpbmRG
b3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQorUHJvZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBw
cm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUoSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnZhbGlkQ29tcGlsYXRpb25Nb2RlOgor
ICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb246CisgICAgY2Fz
ZSBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gUHJvZmlsZXI6OkRGRzsKLSAgICBjYXNlIERG
R01vZGU6CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkRGRzoKICAgICAgICAgcmV0dXJu
IFByb2ZpbGVyOjpERkc7Ci0gICAgY2FzZSBGVExNb2RlOgorICAgIGNhc2UgSklUQ29tcGlsYXRp
b25Nb2RlOjpGVEw6CiAgICAgICAgIHJldHVybiBQcm9maWxlcjo6RlRMOwotICAgIGNhc2UgRlRM
Rm9yT1NSRW50cnlNb2RlOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JF
bnRyeToKICAgICAgICAgcmV0dXJuIFByb2ZpbGVyOjpGVExGb3JPU1JFbnRyeTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMywyMCArMTI1LDE3IEBAIFBy
b2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKENv
bXBpbGF0aW9uTW9kZSBtb2RlKQogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBsYW46OlBs
YW4oQ29kZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2Rl
QmxvY2ssCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlC
eXRlY29kZUluZGV4LAorICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlLCBCeXRlY29kZUluZGV4
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1Zh
bHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgOiBtX21vZGUobW9kZSkKLSAgICAsIG1fdm0o
JnBhc3NlZENvZGVCbG9jay0+dm0oKSkKLSAgICAsIG1fY29kZUJsb2NrKHBhc3NlZENvZGVCbG9j
aykKLSAgICAsIG1fcHJvZmlsZWRERkdDb2RlQmxvY2socHJvZmlsZWRERkdDb2RlQmxvY2spCi0g
ICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKLSAgICAsIG1fb3NyRW50
cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAsIG1fY29tcGlsYXRp
b24oVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSA/IGFkb3B0UmVmKG5ldyBQ
cm9maWxlcjo6Q29tcGlsYXRpb24obV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IobV9jb2RlQmxvY2spLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUo
bW9kZSkpKSA6IG51bGxwdHIpCi0gICAgLCBtX2lubGluZUNhbGxGcmFtZXMoYWRvcHRSZWYobmV3
IElubGluZUNhbGxGcmFtZVNldCgpKSkKLSAgICAsIG1faWRlbnRpZmllcnMobV9jb2RlQmxvY2sp
Ci0gICAgLCBtX3dlYWtSZWZlcmVuY2VzKG1fY29kZUJsb2NrKQotICAgICwgbV90cmFuc2l0aW9u
cyhtX2NvZGVCbG9jaykKLSAgICAsIG1fc3RhZ2UoUHJlcGFyaW5nKQorICAgICAgICA6IEJhc2Uo
bW9kZSwgcGFzc2VkQ29kZUJsb2NrKQorICAgICAgICAsIG1fcHJvZmlsZWRERkdDb2RlQmxvY2so
cHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RI
YW5kbGVWYWx1ZXMpCisgICAgICAgICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlC
eXRlY29kZUluZGV4KQorICAgICAgICAsIG1fY29tcGlsYXRpb24oVU5MSUtFTFkobV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyKSA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24o
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxv
Y2spLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IG51bGxwdHIpCisg
ICAgICAgICwgbV9pbmxpbmVDYWxsRnJhbWVzKGFkb3B0UmVmKG5ldyBJbmxpbmVDYWxsRnJhbWVT
ZXQoKSkpCisgICAgICAgICwgbV9pZGVudGlmaWVycyhtX2NvZGVCbG9jaykKKyAgICAgICAgLCBt
X3dlYWtSZWZlcmVuY2VzKG1fY29kZUJsb2NrKQorICAgICAgICAsIG1fdHJhbnNpdGlvbnMobV9j
b2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCktPmppdENvZGUoKSk7CiAgICAgbV9pbmxpbmVDYWxsRnJhbWVzLT5kaXNhYmxlVGhyZWFkaW5n
Q2hlY2tzKCk7CkBAIC0xNTYsODQgKzE0NSwzOCBAQCBQbGFuOjp+UGxhbigpCiB7CiB9CiAKLWJv
b2wgUGxhbjo6Y29tcHV0ZUNvbXBpbGVUaW1lcygpIGNvbnN0CitzaXplX3QgUGxhbjo6Y29kZVNp
emUoKSBjb25zdAogewotICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKQotICAgICAgICB8
fCBPcHRpb25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8IChtX3ZtICYm
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcik7CisgICAgaWYgKCFtX2ZpbmFsaXplcikKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZmluYWxpemVyLT5jb2RlU2l6ZSgpOwogfQog
Ci1ib29sIFBsYW46OnJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0Cit2b2lkIFBsYW46OmZpbmFs
aXplSW5HQygpCiB7Ci0gICAgcmV0dXJuIE9wdGlvbnM6OnJlcG9ydENvbXBpbGVUaW1lcygpCi0g
ICAgICAgIHx8IE9wdGlvbnM6OnJlcG9ydERGR0NvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8IChP
cHRpb25zOjpyZXBvcnRGVExDb21waWxlVGltZXMoKSAmJiBpc0ZUTCgpKTsKKyAgICBBU1NFUlQo
bV92bSk7CisgICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCpt
X3ZtKTsKIH0KIAotdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoVGhyZWFkRGF0YSogdGhyZWFk
RGF0YSkKK3ZvaWQgUGxhbjo6bm90aWZ5UmVhZHkoKQogewotICAgIG1fdGhyZWFkRGF0YSA9IHRo
cmVhZERhdGE7Ci0KLSAgICBNb25vdG9uaWNUaW1lIGJlZm9yZSB7IH07Ci0gICAgQ1N0cmluZyBj
b2RlQmxvY2tOYW1lOwotICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKQot
ICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICBpZiAoVU5MSUtFTFko
cmVwb3J0Q29tcGlsZVRpbWVzKCkpKQotICAgICAgICBjb2RlQmxvY2tOYW1lID0gdG9DU3RyaW5n
KCptX2NvZGVCbG9jayk7Ci0KLSAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7
Ci0KLSAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1fbW9kZSkgfHwgT3B0aW9uczo6bG9n
UGhhc2VUaW1lcygpKQotICAgICAgICBkYXRhTG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpt
X2NvZGVCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIiwgaW5zdHJ1Y3Rpb25zIHNpemUgPSAiLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpLCAiXG4iKTsKLQotICAgIENvbXBpbGF0aW9u
UGF0aCBwYXRoID0gY29tcGlsZUluVGhyZWFkSW1wbCgpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQo
cGF0aCA9PSBDYW5jZWxQYXRoIHx8IG1fZmluYWxpemVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgo
cGF0aCA9PSBDYW5jZWxQYXRoKSA9PSAobV9zdGFnZSA9PSBDYW5jZWxsZWQpKTsKKyAgICBCYXNl
Ojpub3RpZnlSZWFkeSgpOworICAgIG1fY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVh
ZHlBc3luY2hyb25vdXNseShtX2NvZGVCbG9jaywgbV9wcm9maWxlZERGR0NvZGVCbG9jayk7Cit9
CiAKLSAgICBNb25vdG9uaWNUaW1lIGFmdGVyIHsgfTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0
ZUNvbXBpbGVUaW1lcygpKSkgewotICAgICAgICBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwotICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxDb21waWxlVGltZXMoKSkg
ewotICAgICAgICAgICAgaWYgKGlzRlRMKCkpIHsKLSAgICAgICAgICAgICAgICB0b3RhbEZUTENv
bXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwotICAgICAgICAgICAgICAgIHRvdGFsRlRMREZH
Q29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlOwotICAgICAgICAgICAgICAg
IHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAtIG1fdGltZUJlZm9yZUZUTDsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0gYWZ0
ZXIgLSBiZWZvcmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29uc3QgY2hhciogcGF0aE5hbWUg
PSBudWxscHRyOwotICAgIHN3aXRjaCAocGF0aCkgewotICAgIGNhc2UgRmFpbFBhdGg6Ci0gICAg
ICAgIHBhdGhOYW1lID0gIk4vQSAoZmFpbCkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERG
R1BhdGg6Ci0gICAgICAgIHBhdGhOYW1lID0gIkRGRyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRlRMUGF0aDoKLSAgICAgICAgcGF0aE5hbWUgPSAiRlRMIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDYW5jZWxQYXRoOgotICAgICAgICBwYXRoTmFtZSA9ICJDYW5jZWxsZWQiOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKG1fY29kZUJsb2NrKSB7IC8v
IG1fY29kZUJsb2NrIHdpbGwgYmUgbnVsbCBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGNhbmNlbGxl
ZC4KLSAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKLSAgICAgICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQobV9jb2RlQmxvY2ssICJmdGxDb21waWxlIiwgKCJ0b29rICIsIChhZnRlciAtIGJl
Zm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERGRzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJl
Zm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwp
Lm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBhdGhOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdDb21waWxlIiwg
KCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgd2l0aCAiLCBw
YXRoTmFtZSkpOwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRpbWVzKCkp
KSB7Ci0gICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxvY2tOYW1lLCAiIHVzaW5n
ICIsIG1fbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGludG8gIiwgbV9maW5hbGl6ZXIgPyBt
X2ZpbmFsaXplci0+Y29kZVNpemUoKSA6IDAsICIgYnl0ZXMgaW4gIiwgKGFmdGVyIC0gYmVmb3Jl
KS5taWxsaXNlY29uZHMoKSwgIiBtcyIpOwotICAgICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQot
ICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIChtX3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUp
Lm1pbGxpc2Vjb25kcygpLCAiLCBCMzogIiwgKGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMKS5taWxs
aXNlY29uZHMoKSwgIikiKTsKLSAgICAgICAgZGF0YUxvZygiLlxuIik7Ci0gICAgfQordm9pZCBQ
bGFuOjpjYW5jZWwoKQoreworICAgIEJhc2U6OmNhbmNlbCgpOworICAgIG1fcHJvZmlsZWRERkdD
b2RlQmxvY2sgPSBudWxscHRyOworICAgIG1fbXVzdEhhbmRsZVZhbHVlcy5jbGVhcigpOworICAg
IG1fY29tcGlsYXRpb24gPSBudWxscHRyOworICAgIG1fZmluYWxpemVyID0gbnVsbHB0cjsKKyAg
ICBtX2lubGluZUNhbGxGcmFtZXMgPSBudWxscHRyOworICAgIG1fd2F0Y2hwb2ludHMgPSBEZXNp
cmVkV2F0Y2hwb2ludHMoKTsKKyAgICBtX2lkZW50aWZpZXJzID0gRGVzaXJlZElkZW50aWZpZXJz
KCk7CisgICAgbV93ZWFrUmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOworICAg
IG1fdHJhbnNpdGlvbnMgPSBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKKyAgICBtX2NhbGxiYWNrID0g
bnVsbHB0cjsKIH0KIAogUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVh
ZEltcGwoKQpAQCAtMzAwLDcgKzI0Myw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHJlYWRJbXBsKCkKICAgICAKICAgICBSVU5fUEhBU0UocGVyZm9ybVN0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvbik7CiAKLSAgICBpZiAobV9tb2RlID09IEZUTEZvck9TUkVu
dHJ5TW9kZSkgeworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JP
U1JFbnRyeSkgewogICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3Jl
YXRpb24oZGZnKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgIG1fZmluYWxp
emVyID0gbWFrZVVuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlzKTsKQEAgLTM3Niw3ICszMTks
NyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCgpCiAg
ICAgfQogCiAgICAgc3dpdGNoIChtX21vZGUpIHsKLSAgICBjYXNlIERGR01vZGU6IHsKKyAgICBj
YXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6REZHOiB7CiAgICAgICAgIGRmZy5tX2ZpeHBvaW50U3Rh
dGUgPSBGaXhwb2ludENvbnZlcmdlZDsKIAogICAgICAgICBSVU5fUEhBU0UocGVyZm9ybVRpZXJV
cENoZWNrSW5qZWN0aW9uKTsKQEAgLTQwNSw4ICszNDgsOCBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCgpCiAgICAgICAgIHJldHVybiBERkdQYXRoOwog
ICAgIH0KICAgICAKLSAgICBjYXNlIEZUTE1vZGU6Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1v
ZGU6IHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6RlRMOgorICAgIGNhc2UgSklUQ29t
cGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeTogewogI2lmIEVOQUJMRShGVExfSklUKQogICAg
ICAgICBpZiAoRlRMOjpjYW5Db21waWxlKGRmZykgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7CiAg
ICAgICAgICAgICBtX2ZpbmFsaXplciA9IG1ha2VVbmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhp
cyk7CkBAIC01ODEsMjMgKzUyNCwxMiBAQCB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRh
KiBjb21tb25EYXRhKQogICAgIH0KIH0KIAotdm9pZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQot
ewotICAgIG1fc3RhZ2UgPSBDb21waWxpbmc7Ci19Ci0KLXZvaWQgUGxhbjo6bm90aWZ5UmVhZHko
KQotewotICAgIG1fY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25v
dXNseShtX2NvZGVCbG9jaywgbV9wcm9maWxlZERGR0NvZGVCbG9jayk7Ci0gICAgbV9zdGFnZSA9
IFJlYWR5OwotfQotCiBib29sIFBsYW46OmlzU3RpbGxWYWxpZE9uTWFpblRocmVhZCgpCiB7CiAg
ICAgcmV0dXJuIG1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwg
bV9pZGVudGlmaWVycyk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0
aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKK0NvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXpl
KCkKIHsKICAgICAvLyBXZSBwZXJmb3JtIG11bHRpcGxlIHN0b3JlcyBiZWZvcmUgZW1pdHRpbmcg
YSB3cml0ZS1iYXJyaWVyLiBUbyBlbnN1cmUgdGhhdCBubyBHQyBoYXBwZW5zIGJldHdlZW4gc3Rv
cmUgYW5kIHdyaXRlLWJhcnJpZXIsIHdlIHNob3VsZCBlbnN1cmUgdGhhdAogICAgIC8vIEdDIGlz
IGRlZmVycmVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCkBAIC02NTQsMjQgKzU4Niwz
MCBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxs
YmFjaygpCiAKICAgICAvLyBXZSB3aWxsIGVzdGFibGlzaCBuZXcgcmVmZXJlbmNlcyBmcm9tIHRo
ZSBjb2RlIGJsb2NrIHRvIHRoaW5ncy4gU28sIHdlIG5lZWQgYSBiYXJyaWVyLgogICAgIG1fdm0t
PmhlYXAud3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKworICAgIG1fY2FsbGJhY2stPmNvbXBp
bGF0aW9uRGlkQ29tcGxldGUobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJl
c3VsdCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBsYW46OmZpbmFsaXplQW5k
Tm90aWZ5Q2FsbGJhY2soKQorYm9vbCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKEFic3Ry
YWN0U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+
JiBmdW5jKQogewotICAgIG1fY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUobV9jb2Rl
QmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0Nh
bGxiYWNrKCkpOwotfQorICAgIGlmICghQmFzZTo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNp
dG9yLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1Db21waWxhdGlvbktleSBQbGFu
OjprZXkoKQotewotICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSwgbV9tb2RlKTsKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1
ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQg
YmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0Cisg
ICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCisgICAg
ZnVuYyhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgaWYgKG1fcHJvZmlsZWRERkdD
b2RlQmxvY2spCisgICAgICAgIGZ1bmMobV9wcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCitib29sIFBsYW46
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmICghQmFzZTo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
dmlzaXRvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNsZWFuTXVzdEhhbmRsZVZh
bHVlc0lmTmVjZXNzYXJ5KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgaS0tOykgewpAQCAtNjgzLDcgKzYyMSw2IEBAIHZvaWQgUGxhbjo6Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oVmlzaXRvciYgdmlzaXRvcikKICAgICBtX3JlY29yZGVk
U3RhdHVzZXMudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgbV9yZWNvcmRlZFN0YXR1c2Vz
Lm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCht
X2NvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CiAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Byb2ZpbGVk
REZHQ29kZUJsb2NrKTsKIApAQCAtNjk2LDIzICs2MzMsMTIgQEAgdm9pZCBQbGFuOjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgbV93ZWFrUmVm
ZXJlbmNlcy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogICAgIG1fdHJhbnNpdGlvbnMudmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGUgdm9pZCBQ
bGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Ci10ZW1wbGF0ZSB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7Ci0KLXZvaWQgUGxhbjo6ZmluYWxpemVJbkdDKCkKLXsKLSAgICBBU1NFUlQobV92
bSk7Ci0gICAgbV9yZWNvcmRlZFN0YXR1c2VzLmZpbmFsaXplV2l0aG91dERlbGV0aW5nKCptX3Zt
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KLWJvb2wgUGxhbjo6aXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKK2Jvb2wgUGxhbjo6aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoQWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9z
dGFnZSA9PSBDYW5jZWxsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZpc2l0
b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICBpZiAoIUJh
c2U6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKHZpc2l0b3IpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzIxLDE0ICs2NDcsOSBAQCBib29sIFBsYW46
OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlIGJvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwotdGVtcGxhdGUgYm9vbCBQbGFuOjppc0tub3duVG9CZUxpdmVE
dXJpbmdHQyhTbG90VmlzaXRvciYpOwotCiBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVy
R0MoKQogewotICAgIGlmIChtX3N0YWdlID09IENhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghbV92bS0+aGVhcC5pc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpKQorICAgIGlmICghQmFzZTo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX3ZtLT5oZWFwLmlzTWFya2VkKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzM3LDI2ICs2
NTgsNiBAQCBib29sIFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFBsYW46OmNhbmNlbCgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9z
dGFnZSAhPSBDYW5jZWxsZWQpOwotICAgIEFTU0VSVChtX3ZtKTsKLSAgICBtX3ZtID0gbnVsbHB0
cjsKLQotICAgIG1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3Byb2ZpbGVkREZHQ29kZUJs
b2NrID0gbnVsbHB0cjsKLSAgICBtX211c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKLSAgICBtX2Nv
bXBpbGF0aW9uID0gbnVsbHB0cjsKLSAgICBtX2ZpbmFsaXplciA9IG51bGxwdHI7Ci0gICAgbV9p
bmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKLSAgICBtX3dhdGNocG9pbnRzID0gRGVzaXJlZFdh
dGNocG9pbnRzKCk7Ci0gICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVycygpOwot
ICAgIG1fd2Vha1JlZmVyZW5jZXMgPSBEZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKLSAgICBtX3Ry
YW5zaXRpb25zID0gRGVzaXJlZFRyYW5zaXRpb25zKCk7Ci0gICAgbV9jYWxsYmFjayA9IG51bGxw
dHI7Ci0gICAgbV9zdGFnZSA9IENhbmNlbGxlZDsKLX0KLQogdm9pZCBQbGFuOjpjbGVhbk11c3RI
YW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fbXVzdEhh
bmRsZVZhbHVlQ2xlYW5pbmdMb2NrIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCmlu
ZGV4IGRmYzc5NjZlMDY5YjQ1MzRhNTMyOTA2MzI5MzE0ZjI2MTlhYjJkNjguLmE1Njg3YjY2MmEz
OThkMTAwODE4MWMyZDdjMDAyYWIwOGY3MGY0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCkBAIC0yNiw4ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbXBp
bGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiREZHQ29tcGlsYXRpb25LZXkuaCIKLSNpbmNsdWRl
ICJERkdDb21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkR2xvYmFsUHJvcGVy
dGllcy5oIgogI2luY2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkRG
R0Rlc2lyZWRUcmFuc2l0aW9ucy5oIgpAQCAtMzUsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIkRGR0ZpbmFsaXplci5oIgogI2luY2x1
ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIkpJVFBsYW4uaCIK
ICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIK
ICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCkBAIC01Miw0NSArNTEsMzUgQEAgY2xhc3Mg
VGhyZWFkRGF0YTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi1jbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKK2NsYXNzIFBsYW4gZmluYWwgOiBwdWJsaWMg
SklUUGxhbiB7CisgICAgdXNpbmcgQmFzZSA9IEpJVFBsYW47CisKIHB1YmxpYzoKICAgICBQbGFu
KAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9m
aWxlZERGR0NvZGVCbG9jaywKLSAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICAgICAgSklUQ29tcGlsYXRpb25Nb2RlLCBCeXRl
Y29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgY29uc3QgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigpOwogCi0g
ICAgdm9pZCBjb21waWxlSW5UaHJlYWQoVGhyZWFkRGF0YSopOwotICAgIAotICAgIENvbXBpbGF0
aW9uUmVzdWx0IGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBm
aW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgCi0gICAgdm9pZCBub3RpZnlDb21waWxp
bmcoKTsKLSAgICB2b2lkIG5vdGlmeVJlYWR5KCk7Ci0gICAgCi0gICAgQ29tcGlsYXRpb25LZXkg
a2V5KCk7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRv
cj4KLSAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYsIGNvbnN0IEZ1bmMm
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuKFZpc2l0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBi
b29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKTsKLSAgICB2b2lkIGZpbmFsaXplSW5HQygpOwotICAgIHZvaWQgY2Fu
Y2VsKCk7CisgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBmaW5h
bGl6ZUluR0MoKSBmaW5hbDsKKyAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBjYW5UaWVyVXBBbmRPU1JFbnRlcigpIGNvbnN0IHsgcmV0dXJuICFt
X3RpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgbm90aWZ5
UmVhZHkoKSBmaW5hbDsKKyAgICB2b2lkIGNhbmNlbCgpIGZpbmFsOwogCi0gICAgdm9pZCBjbGVh
bk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZl
QWZ0ZXJHQygpIGZpbmFsOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoQWJzdHJh
Y3RTbG90VmlzaXRvciYpIGZpbmFsOworICAgIGJvb2wgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhB
YnN0cmFjdFNsb3RWaXNpdG9yJiwgY29uc3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mKSBm
aW5hbDsKKyAgICBib29sIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xv
dFZpc2l0b3ImKSBmaW5hbDsKIAotICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0K
IAotICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAg
ICBib29sIGNhblRpZXJVcEFuZE9TUkVudGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGllclVwQW5k
T1NSRW50ZXJCeXRlY29kZXMuaXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIGNsZWFuTXVzdEhhbmRs
ZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBib29sIGlzRlRMKCkgY29uc3QgeyByZXR1cm4g
REZHOjppc0ZUTChtX21vZGUpOyB9Ci0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlCeXRlY29kZUluZGV4OyB9CiAgICAgY29uc3Qg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tdXN0SGFuZGxlVmFsdWVzOyB9Ci0gICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkRGF0YTsgfQogICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGF0aW9uLmdldCgpOyB9CiAK
ICAgICBGaW5hbGl6ZXIqIGZpbmFsaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxpemVyLmdl
dCgpOyB9CkBAIC0xMDksMzIgKzk4LDE3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2Rl
SW5kZXgsIEZpeGVkVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiYgdGllclVwSW5Mb29wSGllcmFyY2h5
KCkgeyByZXR1cm4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7IH0KICAgICBWZWN0b3I8Qnl0ZWNv
ZGVJbmRleD4mIHRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkgeyByZXR1cm4gbV90aWVyVXBB
bmRPU1JFbnRlckJ5dGVjb2RlczsgfQogCi0gICAgZW51bSBTdGFnZSB7IFByZXBhcmluZywgQ29t
cGlsaW5nLCBSZWFkeSwgQ2FuY2VsbGVkIH07Ci0gICAgU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWdlOyB9Ci0KICAgICBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sqIGNhbGxi
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsgfQogICAgIHZvaWQgc2V0Q2Fs
bGJhY2soUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykgeyBtX2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKSBjb25zdDsKLSAgICBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpIGNv
bnN0OwotICAgIAotICAgIGVudW0gQ29tcGlsYXRpb25QYXRoIHsgRmFpbFBhdGgsIERGR1BhdGgs
IEZUTFBhdGgsIENhbmNlbFBhdGggfTsKLSAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhy
ZWFkSW1wbCgpOworICAgIENvbXBpbGF0aW9uUGF0aCBjb21waWxlSW5UaHJlYWRJbXBsKCkgb3Zl
cnJpZGU7CiAgICAgCiAgICAgYm9vbCBpc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoKTsKICAgICBi
b29sIGlzU3RpbGxWYWxpZCgpOwogICAgIHZvaWQgcmVhbGx5QWRkKENvbW1vbkRhdGEqKTsKIAot
ICAgIC8vIFdhcm5pbmc6IHByZXR0eSBtdWNoIGFsbCBvZiB0aGUgcG9pbnRlciBmaWVsZHMgaW4g
dGhpcyBvYmplY3QgZ2V0IG51bGxlZCBieSBjYW5jZWwoKS4gU28sIGlmCi0gICAgLy8geW91J3Jl
IHdyaXRpbmcgY29kZSB0aGF0IGlzIGNhbGxhYmxlIG9uIHRoZSBjYW5jZWwgcGF0aCwgYmUgc3Vy
ZSB0byBudWxsIGNoZWNrIGV2ZXJ5dGhpbmchCi0KLSAgICBDb21waWxhdGlvbk1vZGUgbV9tb2Rl
OwotCi0gICAgVk0qIG1fdm07Ci0KICAgICAvLyBUaGVzZSBjYW4gYmUgcmF3IHBvaW50ZXJzIGJl
Y2F1c2Ugd2UgdmlzaXQgdGhlbSBkdXJpbmcgZXZlcnkgR0MgaW4gY2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4uCi0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRERkdDb2RlQmxvY2s7CiAKICAgICBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVl
Pj4gbV9tdXN0SGFuZGxlVmFsdWVzOwpAQCAtMTQ1LDggKzExOSw2IEBAIHByaXZhdGU6CiAKICAg
ICBjb25zdCBCeXRlY29kZUluZGV4IG1fb3NyRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgVGhy
ZWFkRGF0YSogbV90aHJlYWREYXRhOwotCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlv
bj4gbV9jb21waWxhdGlvbjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5hbGl6ZXI+IG1fZmlu
YWxpemVyOwpAQCAtMTYxLDExICsxMzMsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Qnl0ZWNv
ZGVJbmRleCwgRml4ZWRWZWN0b3I8Qnl0ZWNvZGVJbmRleD4+IG1fdGllclVwSW5Mb29wSGllcmFy
Y2h5OwogICAgIFZlY3RvcjxCeXRlY29kZUluZGV4PiBtX3RpZXJVcEFuZE9TUkVudGVyQnl0ZWNv
ZGVzOwogCi0gICAgU3RhZ2UgbV9zdGFnZTsKLQogICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci0KLSAgICBNb25vdG9uaWNUaW1lIG1fdGltZUJlZm9y
ZUZUTDsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbklubGluZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjI3ODgyZGFhNTlmNmFhNTgxNzJhOWQyODc5YmQ3ODQzY2YyZjk3Ni4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW5JbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJERkdQbGFuLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBl
bmFtZSBWaXNpdG9yPgotdm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3Im
IHZpc2l0b3IsIGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQyh2aXNpdG9yKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIENvbXBpbGF0
aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1p
bmcKLSAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1p
c3RpYyBhbmQgYXNzdW1lIHRoYXQKLSAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2
aXNpdGVkIGR1cmluZyBHQy4KLQotICAgIGZ1bmMobV9jb2RlQmxvY2spOwotICAgIGZ1bmMobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIGlmIChtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KQotICAgICAgICBmdW5jKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1OTQwNzA2MTYzZDZhM2NiYjYyZDJmMzFjNGJlZmUxMjNiN2Y2MzlmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1NhZmVwb2ludC5oIgotCi0jaWYgRU5BQkxF
KERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiREZHU2Nhbm5hYmxl
LmgiCi0jaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7Ci0KLVNhZmVwb2ludDo6UmVzdWx0Ojp+UmVzdWx0KCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX3dhc0NoZWNrZWQpOwotfQotCi1ib29sIFNhZmVwb2ludDo6UmVzdWx0OjpkaWRH
ZXRDYW5jZWxsZWQoKQotewotICAgIG1fd2FzQ2hlY2tlZCA9IHRydWU7Ci0gICAgcmV0dXJuIG1f
ZGlkR2V0Q2FuY2VsbGVkOwotfQotCi1TYWZlcG9pbnQ6OlNhZmVwb2ludChQbGFuJiBwbGFuLCBS
ZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1fdm0ocGxhbi52bSgpKQotICAgICwgbV9wbGFuKHBsYW4p
Ci0gICAgLCBtX2RpZENhbGxCZWdpbihmYWxzZSkKLSAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQubV93YXNDaGVja2VkKTsKLSAgICByZXN1bHQubV93
YXNDaGVja2VkID0gZmFsc2U7Ci0gICAgcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkID0gZmFsc2U7
Ci19Ci0KLVNhZmVwb2ludDo6flNhZmVwb2ludCgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9k
aWRDYWxsQmVnaW4pOwotICAgIGlmIChUaHJlYWREYXRhKiBkYXRhID0gbV9wbGFuLnRocmVhZERh
dGEoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLT5tX3NhZmVwb2ludCA9PSB0aGlz
KTsKLSAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLmxvY2soKTsKLSAgICAgICAgZGF0YS0+bV9z
YWZlcG9pbnQgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBTYWZlcG9pbnQ6OmFkZChTY2Fu
bmFibGUqIHNjYW5uYWJsZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4p
OwotICAgIG1fc2Nhbm5hYmxlcy5hcHBlbmQoc2Nhbm5hYmxlKTsKLX0KLQotdm9pZCBTYWZlcG9p
bnQ6OmJlZ2luKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOwotICAg
IG1fZGlkQ2FsbEJlZ2luID0gdHJ1ZTsKLSAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxh
bi50aHJlYWREYXRhKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPm1fc2FmZXBv
aW50KTsKLSAgICAgICAgZGF0YS0+bV9zYWZlcG9pbnQgPSB0aGlzOwotICAgICAgICBkYXRhLT5t
X3JpZ2h0VG9SdW4udW5sb2NrRmFpcmx5KCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgotdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OwotCi0gICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQotICAgICAgICByZXR1cm47
IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQotICAgIAotICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQotICAg
ICAgICBtX3NjYW5uYWJsZXNbaV0tPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KLXRlbXBs
YXRlIHZvaWQgU2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihBYnN0cmFj
dFNsb3RWaXNpdG9yJik7Ci10ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KLWJvb2wgU2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKLSAgICAKLSAgICBp
ZiAobV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBX
ZSB3ZXJlIGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mg
d2l0aCBpdCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24u
Ci0gICAgCi0gICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9y
KTsKLX0KLQotdGVtcGxhdGUgYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIGJvb2wgU2FmZXBvaW50Ojppc0tub3du
VG9CZUxpdmVEdXJpbmdHQyhTbG90VmlzaXRvciYpOwotCi1ib29sIFNhZmVwb2ludDo6aXNLbm93
blRvQmVMaXZlQWZ0ZXJHQygpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4p
OwotICAgIAotICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKLSAgICAgICAgcmV0
dXJuIHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBs
ZXQncyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2
ZSBhbmQgbW92ZSBvbi4KLSAgICAKLSAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUFm
dGVyR0MoKTsKLX0KLQotdm9pZCBTYWZlcG9pbnQ6OmNhbmNlbCgpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQobV9kaWRDYWxsQmVnaW4pOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2Rp
ZEdldENhbmNlbGxlZCk7IC8vIFdlIGNhbm5vdCBnZXQgY2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ug
c3Vic2VxdWVudCBHQ3Mgd2lsbCB0aGluayB0aGF0IHdlJ3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwg
bm90IGRvIGFueXRoaW5nIHRvIHVzLgotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi5z
dGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCk7Ci0gICAgbV9yZXN1bHQubV9kaWRHZXRDYW5jZWxs
ZWQgPSB0cnVlOwotICAgIG1fdm0gPSBudWxscHRyOwotfQotCi1WTSogU2FmZXBvaW50Ojp2bSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdm07Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQzOTgxNjQ5
ODlkYTFhZDBiNTc5NmM2OTllMWM4Y2NmM2FjNmQyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKERGR19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBWTTsKLQotbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFBsYW47Ci1jbGFzcyBT
Y2FubmFibGU7Ci0KLWNsYXNzIFNhZmVwb2ludCB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgUmVzdWx0
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlc3VsdCgpCi0gICAgICAgICAgICA6IG1fZGlkR2V0
Q2FuY2VsbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX3dhc0NoZWNrZWQodHJ1ZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB+UmVzdWx0KCk7Ci0gICAgICAgIAot
ICAgICAgICBib29sIGRpZEdldENhbmNlbGxlZCgpOwotICAgICAgICAKLSAgICBwcml2YXRlOgot
ICAgICAgICBmcmllbmQgY2xhc3MgU2FmZXBvaW50OwotICAgICAgICAKLSAgICAgICAgYm9vbCBt
X2RpZEdldENhbmNlbGxlZDsKLSAgICAgICAgYm9vbCBtX3dhc0NoZWNrZWQ7Ci0gICAgfTsKLSAg
ICAKLSAgICBTYWZlcG9pbnQoUGxhbiYsIFJlc3VsdCYpOwotICAgIH5TYWZlcG9pbnQoKTsKLSAg
ICAKLSAgICB2b2lkIGFkZChTY2FubmFibGUqKTsKLSAgICAKLSAgICB2b2lkIGJlZ2luKCk7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKFZpc2l0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiBib29s
IGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKFZpc2l0b3ImKTsKLSAgICBib29sIGlzS25vd25Ub0Jl
TGl2ZUFmdGVyR0MoKTsKLSAgICB2b2lkIGNhbmNlbCgpOwotICAgIAotICAgIFZNKiB2bSgpIGNv
bnN0OyAvLyBNYXkgcmV0dXJuIG51bGwgaWYgd2UndmUgYmVlbiBjYW5jZWxsZWQuCi0KLXByaXZh
dGU6Ci0gICAgVk0qIG1fdm07Ci0gICAgUGxhbiYgbV9wbGFuOwotICAgIFZlY3RvcjxTY2FubmFi
bGUqPiBtX3NjYW5uYWJsZXM7Ci0gICAgYm9vbCBtX2RpZENhbGxCZWdpbjsKLSAgICBSZXN1bHQm
IG1fcmVzdWx0OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NjYW5uYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxMDcyYjViNThmYmY0MDMyNzA0NGNlYTc1
NjUzYmVkMjQ5NzYwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOwotY2xhc3MgU2xvdFZp
c2l0b3I7Ci0KLW5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBTY2FubmFibGUgewotcHVibGljOgot
ICAgIFNjYW5uYWJsZSgpIHsgfQotICAgIHZpcnR1YWwgflNjYW5uYWJsZSgpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpID0gMDsKLX07Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNmMDMyZWI3ZTNjODk3MjM1MjY1YTkzYmNiMzNjOWRiODk2MjcwMTAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLVRocmVh
ZERhdGE6OlRocmVhZERhdGEoV29ya2xpc3QqIHdvcmtsaXN0KQotICAgIDogbV93b3JrbGlzdCh3
b3JrbGlzdCkKLSAgICAsIG1fc2FmZXBvaW50KG51bGxwdHIpCi17Ci19Ci0KLVRocmVhZERhdGE6
On5UaHJlYWREYXRhKCkKLXsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGhyZWFkRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJl
YWREYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMmI3ZDJiN2MzNjFlOGI5
ZDM4MGM3MjhjZmI4YTA1YjE3NDY5YmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
TG9jay5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFNhZmVw
b2ludDsKLWNsYXNzIFdvcmtsaXN0OwotCi1jbGFzcyBUaHJlYWREYXRhIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBUaHJlYWREYXRhKFdvcmtsaXN0Kik7Ci0g
ICAgflRocmVhZERhdGEoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFNhZmVw
b2ludDsKLSAgICBmcmllbmQgY2xhc3MgV29ya2xpc3Q7Ci0gICAgCi0gICAgV29ya2xpc3QqIG1f
d29ya2xpc3Q7Ci0gICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJlYWQ7Ci0gICAgVW5j
aGVja2VkTG9jayBtX3JpZ2h0VG9SdW47Ci0gICAgU2FmZXBvaW50KiBtX3NhZmVwb2ludDsKLX07
Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0lu
amVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggYjNhMzAzODE0YmE5NjU1MWNiYWFmZjdmNWEyMzAy
MjhjOTEyNzRhOS4uOGZkMDJmM2JkMzk0MTllODMzZTI3YWE5YTE5NzY1Nzg0NDllN2E3NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBydW4oKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4u
bW9kZSgpID09IERGR01vZGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxh
bi5tb2RlKCkgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpOwogCiAgICAgICAgIGlmICghT3B0
aW9uczo6dXNlRlRMSklUKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMTU3YWRmODc2ZGM4NDY4M2E4NmMwNDZlYTJiZWVjYmFiOTlhOTM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKLQotI2luY2x1ZGUgIkRGR1Nh
ZmVwb2ludC5oIgotI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oIgotI2luY2x1ZGUgPG11dGV4
PgotI2luY2x1ZGUgPHd0Zi9Db21waWxhdGlvblRocmVhZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotY2xhc3MgV29ya2xpc3Q6
OlRocmVhZEJvZHkgZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKLXB1YmxpYzoKLSAg
ICBUaHJlYWRCb2R5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3Jr
bGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PFVuY2hlY2tlZExvY2s+IGxvY2ssIFJlZjxBdXRv
bWF0aWNUaHJlYWRDb25kaXRpb24+JiYgY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkK
LSAgICAgICAgOiBBdXRvbWF0aWNUaHJlYWQobG9ja2VyLCBsb2NrLCBXVEZNb3ZlKGNvbmRpdGlv
biksIFRocmVhZFR5cGU6OkNvbXBpbGVyKQotICAgICAgICAsIG1fd29ya2xpc3Qod29ya2xpc3Qp
Ci0gICAgICAgICwgbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9yZWxhdGl2ZVByaW9yaXR5KHJl
bGF0aXZlUHJpb3JpdHkpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd29ya2xpc3QubV90aHJlYWROYW1l
LmRhdGEoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIpIGZpbmFsCi0gICAgewotICAgICAgICBpZiAobV93b3JrbGlz
dC5tX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0
OwotICAgICAgICAKLSAgICAgICAgbV9wbGFuID0gbV93b3JrbGlzdC5tX3F1ZXVlLnRha2VGaXJz
dCgpOwotICAgICAgICBpZiAoIW1fcGxhbikgewotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtsaXN0LmR1
bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIjog
VGhyZWFkIHNodXR0aW5nIGRvd25cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIFBvbGxSZXN1bHQ6OlN0b3A7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wbGFuLT5zdGFnZSgpID09IFBsYW46OlByZXBhcmluZyk7Ci0gICAgICAgIG1fd29ya2xpc3Qu
bV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKLSAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldv
cms7Ci0gICAgfQotICAgIAotICAgIGNsYXNzIFdvcmtTY29wZTsKLSAgICBmcmllbmQgY2xhc3Mg
V29ya1Njb3BlOwotICAgIGNsYXNzIFdvcmtTY29wZSBmaW5hbCB7Ci0gICAgcHVibGljOgotICAg
ICAgICBXb3JrU2NvcGUoVGhyZWFkQm9keSYgdGhyZWFkKQotICAgICAgICAgICAgOiBtX3RocmVh
ZCh0aHJlYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFk
Lm1fcGxhbik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5tX3dvcmtsaXN0
Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
fldvcmtTY29wZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV90
aHJlYWQubV93b3JrbGlzdC5tX2xvY2sgfTsKLSAgICAgICAgICAgIG1fdGhyZWFkLm1fcGxhbiA9
IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3RocmVhZC5tX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3Rp
dmVUaHJlYWRzLS07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
VGhyZWFkQm9keSYgbV90aHJlYWQ7Ci0gICAgfTsKLSAgICAKLSAgICBXb3JrUmVzdWx0IHdvcmso
KSBmaW5hbAotICAgIHsKLSAgICAgICAgV29ya1Njb3BlIHdvcmtTY29wZSgqdGhpcyk7Ci0KLSAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fZGF0YS5tX3JpZ2h0VG9SdW4gfTsKLSAgICAgICAgewot
ICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAg
ICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDYW5jZWxsZWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICAgICAgbV9wbGFuLT5u
b3RpZnlDb21waWxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogQ29t
cGlsaW5nICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHkiKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNp
bmNlIHdlIG93biByaWdodFRvUnVuLgotICAgICAgICBpZiAobV9wbGFuLT52bSgpLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3RvcHBlZCBi
dXQgaGVyZSB3ZSBhcmUhICgxKVxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fcGxhbi0+Y29tcGlsZUluVGhyZWFkKCZt
X2RhdGEpOwotICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkg
ewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wcGVkIGJ1dCBoZXJlIHdlIGFy
ZSEgKDIpXG4iKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB7Ci0gICAgICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fd29ya2xpc3QubV9sb2NrIH07Ci0gICAgICAgICAgICBp
ZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
cGxhbi0+bm90aWZ5UmVhZHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmts
aXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFM
b2coIjogQ29tcGlsZWQgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSk7Ci0gICAgICAgICAgICBtX3dvcmts
aXN0Lm1fcmVhZHlQbGFucy5hcHBlbmQoV1RGTW92ZShtX3BsYW4pKTsKLSAgICAgICAgICAgIG1f
d29ya2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCB0aHJlYWREaWRTdGFydCgpIGZpbmFsCi0gICAgewotICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCBtX3dvcmtsaXN0LCAiOiBUaHJlYWQg
c3RhcnRlZCIpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAg
ICAgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQcmlv
cml0eSk7Ci0gICAgICAgIAotICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBtYWtlVW5pcXVl
PENvbXBpbGF0aW9uU2NvcGU+KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdGhyZWFkSXNTdG9w
cGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpIGZpbmFsCi0gICAgewotICAgICAgICAvLyBXZSdy
ZSBob2xkaW5nIHRoZSBXb3JrbGlzdDo6bV9sb2NrLCBzbyB3ZSBzaG91bGQgYmUgY2FyZWZ1bCBu
b3QgdG8gZGVhZGxvY2suCi0gICAgICAgIAotICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpLCBtX3dvcmtsaXN0LCAiOiBUaHJlYWQgd2lsbCBzdG9w
Iik7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIW1fcGxhbik7Ci0gICAgICAgIAotICAgICAg
ICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBudWxscHRyOwotICAgICAgICBtX3BsYW4gPSBudWxscHRy
OwotICAgIH0KLQotICAgIFdvcmtsaXN0JiBtX3dvcmtsaXN0OwotICAgIFRocmVhZERhdGEmIG1f
ZGF0YTsKLSAgICBpbnQgbV9yZWxhdGl2ZVByaW9yaXR5OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvblNjb3BlPiBtX2NvbXBpbGF0aW9uU2NvcGU7Ci0gICAgUmVmUHRyPFBsYW4+IG1f
cGxhbjsKLX07Ci0KLXN0YXRpYyBDU3RyaW5nIGNyZWF0ZVdvcmtsaXN0TmFtZShDU3RyaW5nJiYg
dGllck5hbWUpCi17Ci0jaWYgT1MoTElOVVgpCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhXVEZNb3Zl
KHRpZXJOYW1lKSwgIldvcmtlciIpOwotI2Vsc2UKLSAgICByZXR1cm4gdG9DU3RyaW5nKFdURk1v
dmUodGllck5hbWUpLCAiIFdvcmtsaXN0IFdvcmtlciBUaHJlYWQiKTsKLSNlbmRpZgotfQotCi1X
b3JrbGlzdDo6V29ya2xpc3QoQ1N0cmluZyYmIHRpZXJOYW1lKQotICAgIDogbV90aHJlYWROYW1l
KGNyZWF0ZVdvcmtsaXN0TmFtZShXVEZNb3ZlKHRpZXJOYW1lKSkpCi0gICAgLCBtX3BsYW5FbnF1
ZXVlZChBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQotICAgICwgbV9sb2NrKEJv
eDxVbmNoZWNrZWRMb2NrPjo6Y3JlYXRlKCkpCi17Ci19Ci0KLVdvcmtsaXN0Ojp+V29ya2xpc3Qo
KQotewotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1f
cXVldWUuYXBwZW5kKG51bGxwdHIpOyAvLyBVc2UgbnVsbCBwbGFuIHRvIGluZGljYXRlIHRoYXQg
d2Ugd2FudCB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KLSAgICAgICAgbV9wbGFuRW5xdWV1ZWQt
Pm5vdGlmeUFsbChsb2NrZXIpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVh
ZHMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX3RocmVhZHNbaV0tPm1fdGhyZWFkLT5qb2luKCk7
Ci0gICAgQVNTRVJUKCFtX251bWJlck9mQWN0aXZlVGhyZWFkcyk7Ci19Ci0KLXZvaWQgV29ya2xp
c3Q6OmZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywgaW50IHJlbGF0aXZl
UHJpb3JpdHkpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZUaHJlYWRzKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9m
VGhyZWFkczsgaS0tOykgewotICAgICAgICBjcmVhdGVOZXdUaHJlYWQobG9ja2VyLCByZWxhdGl2
ZVByaW9yaXR5KTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OmNyZWF0ZU5ld1RocmVhZChj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKLXsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRGF0YT4gZGF0YSA9IG1ha2VVbmlxdWU8VGhyZWFkRGF0
YT4odGhpcyk7Ci0gICAgZGF0YS0+bV90aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkQm9keShs
b2NrZXIsICp0aGlzLCAqZGF0YSwgbV9sb2NrLCBtX3BsYW5FbnF1ZXVlZC5jb3B5UmVmKCksIHJl
bGF0aXZlUHJpb3JpdHkpKTsKLSAgICBtX3RocmVhZHMuYXBwZW5kKFdURk1vdmUoZGF0YSkpOwot
fQotCi1SZWY8V29ya2xpc3Q+IFdvcmtsaXN0OjpjcmVhdGUoQ1N0cmluZyYmIHRpZXJOYW1lLCB1
bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2ZVByaW9yaXR5KQotewotICAgIFJl
ZjxXb3JrbGlzdD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBXb3JrbGlzdChXVEZNb3ZlKHRpZXJO
YW1lKSkpOwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24obnVtYmVyT2ZUaHJlYWRzLCByZWxh
dGl2ZVByaW9yaXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFdvcmtsaXN0Ojpp
c0FjdGl2ZUZvclZNKFZNJiB2bSkgY29uc3QKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9j
ayB9OwotICAgIFBsYW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7Ci0g
ICAgZm9yIChQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT52YWx1ZS0+dm0oKSA9PSAm
dm0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdvcmtsaXN0OjplbnF1ZXVlKFJlZjxQbGFuPiYmIHBsYW4pCi17Ci0gICAgTG9j
a2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0
aW9uUXVldWUoKSkgewotICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgZGF0YUxvZygiOiBFbnF1ZXVlaW5nIHBsYW4gdG8gb3B0aW1pemUgIiwgcGxhbi0+a2V5
KCksICJcbiIpOwotICAgIH0KLSAgICBBU1NFUlQobV9wbGFucy5maW5kKHBsYW4tPmtleSgpKSA9
PSBtX3BsYW5zLmVuZCgpKTsKLSAgICBtX3BsYW5zLmFkZChwbGFuLT5rZXkoKSwgcGxhbi5jb3B5
UmVmKCkpOwotICAgIG1fcXVldWUuYXBwZW5kKFdURk1vdmUocGxhbikpOwotICAgIG1fcGxhbkVu
cXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKLX0KLQotV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0
Ojpjb21waWxhdGlvblN0YXRlKENvbXBpbGF0aW9uS2V5IGtleSkKLXsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgKm1fbG9jayB9OwotICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmZp
bmQoa2V5KTsKLSAgICBpZiAoaXRlciA9PSBtX3BsYW5zLmVuZCgpKQotICAgICAgICByZXR1cm4g
Tm90S25vd247Ci0gICAgcmV0dXJuIGl0ZXItPnZhbHVlLT5zdGFnZSgpID09IFBsYW46OlJlYWR5
ID8gQ29tcGlsZWQgOiBDb21waWxpbmc7Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFs
bFBsYW5zRm9yVk1BcmVSZWFkeShWTSYgdm0pCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIAotICAgIC8vIFdoaWxlIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgY29tcGlsZXIg
dG8gZmluaXNoLCB0aGUgY29sbGVjdG9yIG1pZ2h0IGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQKLSAg
ICAvLyB0aGUgY29tcGlsZXIgYW5kIHRoZW4gaXQgd2lsbCBiZSB3YWl0aW5nIGZvciB1cyB0byBz
dG9wLiBUaGF0J3MgYSBkZWFkbG9jay4gV2UgYXZvaWQgdGhhdAotICAgIC8vIGRlYWRsb2NrIGJ5
IHJlbGlucXVpc2hpbmcgb3VyIGhlYXAgYWNjZXNzLCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgcHJl
dGVuZHMgdGhhdCB3ZSBhcmUgc3RvcHBlZAotICAgIC8vIGV2ZW4gaWYgd2UgYXJlbid0LgotICAg
IFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUgcmVsZWFzZUhlYXBBY2Nlc3NTY29wZSh2bS5oZWFwKTsK
LSAgICAKLSAgICAvLyBXYWl0IGZvciBhbGwgb2YgdGhlIHBsYW5zIGZvciB0aGUgZ2l2ZW4gVk0g
dG8gY29tcGxldGUuIFRoZSBpZGVhIGhlcmUKLSAgICAvLyBpcyB0aGF0IHdlIHdhbnQgYWxsIG9m
IHRoZSBjYWxsZXIgVk0ncyBwbGFucyB0byBiZSBkb25lLiBXZSBkb24ndCBjYXJlCi0gICAgLy8g
YWJvdXQgYW55IG90aGVyIFZNJ3MgcGxhbnMsIGFuZCB3ZSB3b24ndCBhdHRlbXB0IHRvIHdhaXQg
b24gdGhvc2UuCi0gICAgLy8gQWZ0ZXIgd2UgcmVsZWFzZSB0aGlzIGxvY2ssIHdlIGtub3cgdGhh
dCBhbHRob3VnaCBvdGhlciBWTXMgbWF5IHN0aWxsCi0gICAgLy8gYmUgYWRkaW5nIHBsYW5zLCBv
dXIgVk0gd2lsbCBub3QgYmUuCi0gICAgCi0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsK
LSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgewotICAg
ICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygiOiBX
YWl0aW5nIGZvciBhbGwgaW4gVk0gdG8gY29tcGxldGUuXG4iKTsKLSAgICB9Ci0gICAgCi0gICAg
Zm9yICg7OykgewotICAgICAgICBib29sIGFsbEFyZUNvbXBpbGVkID0gdHJ1ZTsKLSAgICAgICAg
UGxhbk1hcDo6aXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnZtKCkgIT0gJnZtKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5zdGFnZSgpICE9
IFBsYW46OlJlYWR5KSB7Ci0gICAgICAgICAgICAgICAgYWxsQXJlQ29tcGlsZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGFsbEFyZUNvbXBpbGVkKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICBtX3BsYW5Db21waWxlZC53YWl0KCptX2xvY2spOwotICAgIH0KLX0KLQot
dm9pZCBXb3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgVmVjdG9yPFJl
ZlB0cjxQbGFuPiwgOD4mIG15UmVhZHlQbGFucykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcmVhZHlQbGFucy5zaXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IG1fcmVhZHlQbGFuc1tpXTsKLSAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZt
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChwbGFuLT5zdGFnZSgpICE9IFBs
YW46OlJlYWR5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG15UmVhZHlQbGFucy5h
cHBlbmQocGxhbik7Ci0gICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxh
c3QoKTsKLSAgICAgICAgbV9yZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9wbGFu
cy5yZW1vdmUocGxhbi0+a2V5KCkpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrbGlzdDo6cmVtb3Zl
QWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4
PiBteVJlYWR5UGxhbnM7Ci0gICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBteVJlYWR5
UGxhbnMpOwotfQotCi1Xb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQ
bGFuc0ZvclZNKFZNJiB2bSwgQ29tcGlsYXRpb25LZXkgcmVxdWVzdGVkS2V5KQotewotICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiBteVJl
YWR5UGxhbnM7Ci0gICAgCi0gICAgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBteVJlYWR5
UGxhbnMpOwotICAgIAotICAgIFN0YXRlIHJlc3VsdGluZ1N0YXRlID0gTm90S25vd247Ci0KLSAg
ICB3aGlsZSAoIW15UmVhZHlQbGFucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+
IHBsYW4gPSBteVJlYWR5UGxhbnMudGFrZUxhc3QoKTsKLSAgICAgICAgQ29tcGlsYXRpb25LZXkg
Y3VycmVudEtleSA9IHBsYW4tPmtleSgpOwotICAgICAgICAKLSAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgKnRoaXMsICI6IENvbXBsZXRpbmcg
IiwgY3VycmVudEtleSk7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSA9
PSBQbGFuOjpSZWFkeSk7Ci0KLSAgICAgICAgcGxhbi0+ZmluYWxpemVBbmROb3RpZnlDYWxsYmFj
aygpOwotICAgICAgICAKLSAgICAgICAgaWYgKGN1cnJlbnRLZXkgPT0gcmVxdWVzdGVkS2V5KQot
ICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxlZDsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKCEhcmVxdWVzdGVkS2V5ICYmIHJlc3VsdGluZ1N0YXRlID09IE5vdEtub3duKSB7Ci0gICAg
ICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgIGlmIChtX3BsYW5zLmNvbnRh
aW5zKHJlcXVlc3RlZEtleSkpCi0gICAgICAgICAgICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGlu
ZzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdGluZ1N0YXRlOwotfQotCi12b2lkIFdv
cmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mIHZtKQotewotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkodm0pOwot
ICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKLX0KLQotdm9pZCBXb3JrbGlzdDo6
c3VzcGVuZEFsbFRocmVhZHMoKQotewotICAgIG1fc3VzcGVuc2lvbkxvY2subG9jaygpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fdGhy
ZWFkc1tpXS0+bV9yaWdodFRvUnVuLmxvY2soKTsKLX0KLQotdm9pZCBXb3JrbGlzdDo6cmVzdW1l
QWxsVGhyZWFkcygpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsg
aS0tOykKLSAgICAgICAgbV90aHJlYWRzW2ldLT5tX3JpZ2h0VG9SdW4udW5sb2NrKCk7Ci0gICAg
bV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KLXZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBWTSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7Ci0gICAgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAg
ICBpZiAocGxhbi0+dm0oKSAhPSB2bSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHBsYW4tPmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIC8vIFRoaXMgbG9vcCBkb2Vzbid0IG5lZWQgbG9ja2luZyBiZWNh
dXNlOgotICAgIC8vICgxKSBubyBuZXcgdGhyZWFkcyBjYW4gYmUgYWRkZWQgdG8gbV90aHJlYWRz
LiBIZW5jZSwgaXQgaXMgaW1tdXRhYmxlIGFuZCBuZWVkcyBubyBsb2Nrcy4KLSAgICAvLyAoMikg
VGhyZWFkRGF0YTo6bV9zYWZlcG9pbnQgaXMgcHJvdGVjdGVkIGJ5IHRoYXQgdGhyZWFkJ3MgbV9y
aWdodFRvUnVuIHdoaWNoIHdlIG11c3QgYmUKLSAgICAvLyAgICAgaG9sZGluZyBoZXJlIGJlY2F1
c2Ugb2YgYSBwcmlvciBjYWxsIHRvIHN1c3BlbmRBbGxUaHJlYWRzKCkuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBUaHJlYWREYXRhKiBk
YXRhID0gbV90aHJlYWRzW2ldLmdldCgpOwotICAgICAgICBTYWZlcG9pbnQqIHNhZmVwb2ludCA9
IGRhdGEtPm1fc2FmZXBvaW50OwotICAgICAgICBpZiAoc2FmZXBvaW50ICYmIHNhZmVwb2ludC0+
dm0oKSA9PSB2bSkKLSAgICAgICAgICAgIHNhZmVwb2ludC0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSB2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKLXRlbXBsYXRlIHZvaWQg
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLQotdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tlciBs
b2NrZXIgeyAqbV9sb2NrIH07Ci0gICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQ
bGFuS2V5czsKLSAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5i
ZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgUGxh
biogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgaWYgKHBsYW4tPnZtKCkg
IT0gJnZtKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHBsYW4t
PmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKSkgewotICAgICAgICAgICAgICAgIHBsYW4tPmZpbmFs
aXplSW5HQygpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpDYW5jZWxsZWQp
OyAvLyBTaG91bGQgbm90IGJlIGNhbmNlbGxlZCwgeWV0LgotICAgICAgICAgICAgQVNTRVJUKCFk
ZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpKTsKLSAgICAgICAgICAgIGRlYWRQbGFu
S2V5cy5hZGQocGxhbi0+a2V5KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZGVhZFBsYW5L
ZXlzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5
Pjo6aXRlcmF0b3IgaXRlciA9IGRlYWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFu
S2V5cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIG1fcGxhbnMudGFrZSgqaXRlcikt
PmNhbmNlbCgpOwotICAgICAgICAgICAgRGVxdWU8UmVmUHRyPFBsYW4+PiBuZXdRdWV1ZTsKLSAg
ICAgICAgICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHBsYW4tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2VsbGVkKQotICAgICAgICAgICAgICAgICAg
ICBuZXdRdWV1ZS5hcHBlbmQocGxhbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3F1
ZXVlLnN3YXAobmV3UXVldWUpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcmVhZHlQbGFucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChtX3JlYWR5
UGxhbnNbaV0tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2VsbGVkKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQ
bGFucy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBObyBsb2NraW5n
IG5lZWRlZCBmb3IgdGhpcyBwYXJ0LCBzZWUgY29tbWVudCBpbiB2aXNpdFdlYWtSZWZlcmVuY2Vz
KCkuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICBUaHJlYWREYXRhKiBkYXRhID0gbV90aHJlYWRzW2ldLmdldCgpOwotICAgICAgICBTYWZl
cG9pbnQqIHNhZmVwb2ludCA9IGRhdGEtPm1fc2FmZXBvaW50OwotICAgICAgICBpZiAoIXNhZmVw
b2ludCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgp
ICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2FmZXBvaW50LT5p
c0tub3duVG9CZUxpdmVBZnRlckdDKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
c2FmZXBvaW50LT5jYW5jZWwoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2xpc3Q6OnJlbW92ZU5v
bkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mIHZtKQotewotICAgIExvY2tlciBsb2NrZXIgeyAqbV9s
b2NrIH07Ci0gICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOwotICAgIFZl
Y3RvcjxSZWZQdHI8UGxhbj4+IGRlYWRQbGFuczsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9w
bGFucykgewotICAgICAgICBQbGFuKiBwbGFuID0gZW50cnkudmFsdWUuZ2V0KCk7Ci0gICAgICAg
IGlmIChwbGFuLT52bSgpICE9ICZ2bSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAocGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpDb21waWxpbmcpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZGVhZFBsYW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7Ci0gICAgICAgIGRlYWRQ
bGFucy5hcHBlbmQocGxhbik7Ci0gICAgfQotICAgIGZvciAoQ29tcGlsYXRpb25LZXkga2V5IDog
ZGVhZFBsYW5LZXlzKQotICAgICAgICBtX3BsYW5zLnJlbW92ZShrZXkpOwotICAgIERlcXVlPFJl
ZlB0cjxQbGFuPj4gbmV3UXVldWU7Ci0gICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAg
IGlmICghZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSkKLSAgICAgICAgICAgIG5l
d1F1ZXVlLmFwcGVuZChXVEZNb3ZlKHBsYW4pKTsKLSAgICB9Ci0gICAgbV9xdWV1ZSA9IFdURk1v
dmUobmV3UXVldWUpOwotICAgIG1fcmVhZHlQbGFucy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAg
ICAgWyZdIChSZWZQdHI8UGxhbj4mIHBsYW4pIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJu
IGRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSk7Ci0gICAgICAgIH0pOwotICAgIGZv
ciAoYXV0byYgcGxhbiA6IGRlYWRQbGFucykKLSAgICAgICAgcGxhbi0+Y2FuY2VsKCk7Ci19Ci0K
LXNpemVfdCBXb3JrbGlzdDo6cXVldWVMZW5ndGgoKQotewotICAgIExvY2tlciBsb2NrZXIgeyAq
bV9sb2NrIH07Ci0gICAgcmV0dXJuIG1fcXVldWUuc2l6ZSgpOwotfQotCi12b2lkIFdvcmtsaXN0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKLSAgICBkdW1wKGxvY2tlciwgb3V0KTsKLX0KLQotdm9pZCBXb3JrbGlzdDo6ZHVt
cChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KAotICAgICAgICAiV29ya2xpc3QoIiwgUmF3UG9pbnRlcih0aGlzKSwgIilbUXVl
dWUgTGVuZ3RoID0gIiwgbV9xdWV1ZS5zaXplKCksCi0gICAgICAgICIsIE1hcCBTaXplID0gIiwg
bV9wbGFucy5zaXplKCksICIsIE51bSBSZWFkeSA9ICIsIG1fcmVhZHlQbGFucy5zaXplKCksCi0g
ICAgICAgICIsIE51bSBBY3RpdmUgVGhyZWFkcyA9ICIsIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRz
LCAiLyIsIG1fdGhyZWFkcy5zaXplKCksICJdIik7Ci19Ci0KLXVuc2lnbmVkIFdvcmtsaXN0Ojpz
ZXROdW1iZXJPZlRocmVhZHModW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQ
cmlvcml0eSkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9zdXNwZW5zaW9uTG9jayB9OwotICAg
IGF1dG8gY3VycmVudE51bWJlck9mVGhyZWFkcyA9IG1fdGhyZWFkcy5zaXplKCk7Ci0gICAgaWYg
KG51bWJlck9mVGhyZWFkcyA8IGN1cnJlbnROdW1iZXJPZlRocmVhZHMpIHsKLSAgICAgICAgewot
ICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGN1cnJlbnROdW1iZXJPZlRocmVhZHM7IGktLSA+IG51bWJlck9mVGhyZWFk
czspIHsKLSAgICAgICAgICAgICAgICBpZiAobV90aHJlYWRzW2ldLT5tX3RocmVhZC0+aGFzVW5k
ZXJseWluZ1RocmVhZChsb2NrZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcXVldWUuYXBw
ZW5kKG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBtX3RocmVhZHNbaV0tPm1fdGhyZWFk
LT5ub3RpZnkobG9ja2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudE51bWJlck9mVGhyZWFkczsg
aS0tID4gbnVtYmVyT2ZUaHJlYWRzOykgewotICAgICAgICAgICAgYm9vbCBpc1N0b3BwZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
bG9jayB9OwotICAgICAgICAgICAgICAgIGlzU3RvcHBlZCA9IG1fdGhyZWFkc1tpXS0+bV90aHJl
YWQtPnRyeVN0b3AobG9ja2VyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaXNT
dG9wcGVkKQotICAgICAgICAgICAgICAgIG1fdGhyZWFkc1tpXS0+bV90aHJlYWQtPmpvaW4oKTsK
LSAgICAgICAgICAgIG1fdGhyZWFkcy5yZW1vdmUoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV90
aHJlYWRzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIEFTU0VSVChtX251bWJlck9mQWN0aXZlVGhy
ZWFkcyA8PSBudW1iZXJPZlRocmVhZHMpOwotICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZUaHJlYWRz
ID4gY3VycmVudE51bWJlck9mVGhyZWFkcykgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1f
bG9jayB9OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50TnVtYmVyT2ZUaHJlYWRz
OyBpIDwgbnVtYmVyT2ZUaHJlYWRzOyBpKyspCi0gICAgICAgICAgICBjcmVhdGVOZXdUaHJlYWQo
bG9ja2VyLCByZWxhdGl2ZVByaW9yaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIGN1cnJlbnROdW1i
ZXJPZlRocmVhZHM7Ci19Ci0KLXN0YXRpYyBXb3JrbGlzdCogdGhlR2xvYmFsREZHV29ya2xpc3Q7
Ci1zdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlclRocmVhZHM7Ci1zdGF0aWMgdW5z
aWduZWQgbnVtYmVyT2ZGVExDb21waWxlclRocmVhZHM7Ci0KLXN0YXRpYyB1bnNpZ25lZCBnZXRO
dW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpCi17Ci0gICAgcmV0dXJuIG51bWJlck9mREZHQ29t
cGlsZXJUaHJlYWRzID8gbnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMgOiBPcHRpb25zOjpudW1i
ZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgZ2V0TnVtYmVy
T2ZGVExDb21waWxlclRocmVhZHMoKQotewotICAgIHJldHVybiBudW1iZXJPZkZUTENvbXBpbGVy
VGhyZWFkcyA/IG51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzIDogT3B0aW9uczo6bnVtYmVyT2ZG
VExDb21waWxlclRocmVhZHMoKTsKLX0KLQotdW5zaWduZWQgc2V0TnVtYmVyT2ZERkdDb21waWxl
clRocmVhZHModW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKQotewotICAgIGF1dG8gcHJldmlvdXNO
dW1iZXJPZlRocmVhZHMgPSBnZXROdW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcygpOwotICAgIG51
bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzID0gbnVtYmVyT2ZUaHJlYWRzOwotICAgIHJldHVybiBw
cmV2aW91c051bWJlck9mVGhyZWFkczsKLX0KLQotdW5zaWduZWQgc2V0TnVtYmVyT2ZGVExDb21w
aWxlclRocmVhZHModW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKQotewotICAgIGF1dG8gcHJldmlv
dXNOdW1iZXJPZlRocmVhZHMgPSBnZXROdW1iZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpOwotICAg
IG51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzID0gbnVtYmVyT2ZUaHJlYWRzOwotICAgIHJldHVy
biBwcmV2aW91c051bWJlck9mVGhyZWFkczsKLX0KLQotV29ya2xpc3QmIGVuc3VyZUdsb2JhbERG
R1dvcmtsaXN0KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUdsb2Jh
bFdvcmtsaXN0T25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUdsb2JhbFdv
cmtsaXN0T25jZUZsYWcsIFtdIHsKLSAgICAgICAgV29ya2xpc3QqIHdvcmtsaXN0ID0gJldvcmts
aXN0OjpjcmVhdGUoIkRGRyIsIGdldE51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzKCksIE9wdGlv
bnM6OnByaW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKS5sZWFrUmVmKCk7Ci0gICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIHRoZUdsb2JhbERGR1dvcmtsaXN0
ID0gd29ya2xpc3Q7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGVHbG9iYWxERkdXb3JrbGlzdDsK
LX0KLQotV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKQotewotICAg
IHJldHVybiB0aGVHbG9iYWxERkdXb3JrbGlzdDsKLX0KLQotc3RhdGljIFdvcmtsaXN0KiB0aGVH
bG9iYWxGVExXb3JrbGlzdDsKLQotV29ya2xpc3QmIGVuc3VyZUdsb2JhbEZUTFdvcmtsaXN0KCkK
LXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25j
ZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZs
YWcsIFtdIHsKLSAgICAgICAgV29ya2xpc3QqIHdvcmtsaXN0ID0gJldvcmtsaXN0OjpjcmVhdGUo
IkZUTCIsIGdldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzKCksIE9wdGlvbnM6OnByaW9yaXR5
RGVsdGFPZkZUTENvbXBpbGVyVGhyZWFkcygpKS5sZWFrUmVmKCk7Ci0gICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIHRoZUdsb2JhbEZUTFdvcmtsaXN0ID0gd29ya2xpc3Q7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGVHbG9iYWxGVExXb3JrbGlzdDsKLX0KLQotV29ya2xp
c3QqIGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKQotewotICAgIHJldHVybiB0aGVH
bG9iYWxGVExXb3JrbGlzdDsKLX0KLQotV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9y
KENvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
SW52YWxpZENvbXBpbGF0aW9uTW9kZToKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dvcmtsaXN0KCk7Ci0gICAgY2Fz
ZSBERkdNb2RlOgotICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsKLSAg
ICBjYXNlIEZUTE1vZGU6Ci0gICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6Ci0gICAgICAgIHJl
dHVybiBlbnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpOwot
fQotCi11bnNpZ25lZCBudW1iZXJPZldvcmtsaXN0cygpIHsgcmV0dXJuIDI7IH0KLQotV29ya2xp
c3QmIGVuc3VyZVdvcmtsaXN0Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgc3dpdGNo
IChpbmRleCkgewotICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2JhbERGR1dv
cmtsaXN0KCk7Ci0gICAgY2FzZSAxOgotICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsRlRMV29y
a2xpc3QoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsKLSAgICB9Ci19
Ci0KLVdvcmtsaXN0KiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwodW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgc3dpdGNoIChpbmRleCkgewotICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJu
IGV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKTsKLSAgICBjYXNlIDE6Ci0gICAgICAg
IHJldHVybiBleGlzdGluZ0dsb2JhbEZUTFdvcmtsaXN0T3JOdWxsKCk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotfQotCi1Xb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVu
c2lnbmVkIGluZGV4KQotewotICAgIFdvcmtsaXN0KiByZXN1bHQgPSBleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXhPck51bGwoaW5kZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0gICAg
cmV0dXJuICpyZXN1bHQ7Ci19Ci0KLXZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTsp
IHsKLSAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dv
cmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+Y29tcGxldGVB
bGxQbGFuc0ZvclZNKHZtKTsKLSAgICB9Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQot
Ci12b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCi17Ci19Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTc2ZTAzZTQ3ZTZlZjUwM2M2ZDAxMTZlY2ZiZGMwYThjNmM3NWM4OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKLSNpbmNs
dWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgot
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL0xvY2suaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0KLWNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8V29y
a2xpc3Q+IHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywg
Q29tcGlsZWQgfTsKLQotICAgIH5Xb3JrbGlzdCgpOwotICAgIAotICAgIHN0YXRpYyBSZWY8V29y
a2xpc3Q+IGNyZWF0ZShDU3RyaW5nJiYgdGllck5hbWUsIHVuc2lnbmVkIG51bWJlck9mVGhyZWFk
cywgaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKLSAgICAKLSAgICB2b2lkIGVucXVldWUoUmVm
PFBsYW4+JiYpOwotICAgIAotICAgIC8vIFRoaXMgaXMgZXF1aXZhbGVudCB0bzoKLSAgICAvLyB3
b3JrbGlzdC0+d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KHZtKTsKLSAgICAvLyB3b3Jr
bGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwotICAgIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSBWaXNpdG9yPgotICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0m
LCBjb25zdCBGdW5jJik7Ci0KLSAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFk
eShWTSYpOwotICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgQ29tcGls
YXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKLSAgICB2b2lkIHJlbW92ZUFsbFJlYWR5UGxh
bnNGb3JWTShWTSYpOwotICAgIAotICAgIFN0YXRlIGNvbXBpbGF0aW9uU3RhdGUoQ29tcGlsYXRp
b25LZXkpOwotICAgIAotICAgIHNpemVfdCBxdWV1ZUxlbmd0aCgpOwotICAgIAotICAgIHZvaWQg
c3VzcGVuZEFsbFRocmVhZHMoKTsKLSAgICB2b2lkIHJlc3VtZUFsbFRocmVhZHMoKTsKLSAgICAK
LSAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKLSAgICAKLSAgICAvLyBPbmx5IGNh
bGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoVmlz
aXRvciYpOwotICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5zKFZNJik7Ci0gICAgCi0gICAgdm9pZCBy
ZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKFZNJik7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Ci0gICAgdW5zaWduZWQgc2V0TnVtYmVyT2ZUaHJlYWRzKHVuc2ln
bmVkLCBpbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBXb3JrbGlzdChDU3RyaW5nJiYgdGllck5h
bWUpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24odW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBp
bnQpOwotICAgIHZvaWQgY3JlYXRlTmV3VGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgaW50
KTsKLSAgICAKLSAgICBjbGFzcyBUaHJlYWRCb2R5OwotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRC
b2R5OwotICAgIAotICAgIHZvaWQgcnVuVGhyZWFkKFRocmVhZERhdGEqKTsKLSAgICBzdGF0aWMg
dm9pZCB0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7Ci0gICAgCi0gICAgdm9pZCByZW1v
dmVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBWZWN0b3I8UmVmUHRyPFBsYW4+LCA4PiYpOwotCi0g
ICAgdm9pZCBkdW1wKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgUHJpbnRTdHJlYW0mKSBjb25zdDsK
LSAgICAKLSAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKLSAgICBD
U3RyaW5nIG1fdGhyZWFkTmFtZTsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRocmVhZERh
dGE+PiBtX3RocmVhZHM7Ci0gICAgCi0gICAgLy8gVXNlZCB0byBpbmZvcm0gdGhlIHRocmVhZCBh
Ym91dCB3aGF0IHdvcmsgdGhlcmUgaXMgbGVmdCB0byBkby4KLSAgICBEZXF1ZTxSZWZQdHI8UGxh
bj4+IG1fcXVldWU7Ci0gICAgCi0gICAgLy8gVXNlZCB0byBhbnN3ZXIgcXVlc3Rpb25zIGFib3V0
IHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29kZSBibG9jay4gVGhpcwotICAgIC8vIGlzIHBhcnRp
Y3VsYXJseSBncmVhdCBmb3IgdGhlIGN0aV9vcHRpbWl6ZSBPU1Igc2xvdyBwYXRoLCB3aGljaCB3
YW50cwotICAgIC8vIHRvIGtub3c6IGRpZCBJIGdldCBoZXJlIGJlY2F1c2UgYSBiZXR0ZXIgdmVy
c2lvbiBvZiBtZSBqdXN0IGdvdAotICAgIC8vIGNvbXBpbGVkPwotICAgIHR5cGVkZWYgSGFzaE1h
cDxDb21waWxhdGlvbktleSwgUmVmUHRyPFBsYW4+PiBQbGFuTWFwOwotICAgIFBsYW5NYXAgbV9w
bGFuczsKLSAgICAKLSAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZmluZCB3aGljaCBwbGFucyBoYXZl
IGJlZW4gY29tcGlsZWQgYW5kIGFyZSByZWFkeSB0bwotICAgIC8vIGJlIGNvbXBsZXRlZC4KLSAg
ICBWZWN0b3I8UmVmUHRyPFBsYW4+LCAxNj4gbV9yZWFkeVBsYW5zOwotICAgIFJlZjxBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVucXVldWVkOwotICAgIFVuY2hlY2tlZENvbmRpdGlv
biBtX3BsYW5Db21waWxlZDsKLQotICAgIFVuY2hlY2tlZExvY2sgbV9zdXNwZW5zaW9uTG9jazsK
LSAgICBCb3g8VW5jaGVja2VkTG9jaz4gbV9sb2NrOwotfTsKLQotSlNfRVhQT1JUX1BSSVZBVEUg
dW5zaWduZWQgc2V0TnVtYmVyT2ZERkdDb21waWxlclRocmVhZHModW5zaWduZWQpOwotSlNfRVhQ
T1JUX1BSSVZBVEUgdW5zaWduZWQgc2V0TnVtYmVyT2ZGVExDb21waWxlclRocmVhZHModW5zaWdu
ZWQpOwotCi0vLyBGb3IgREZHTW9kZSBjb21waWxhdGlvbnMuCi1KU19FWFBPUlRfUFJJVkFURSBX
b3JrbGlzdCYgZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsKLUpTX0VYUE9SVF9QUklWQVRFIFdv
cmtsaXN0KiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7Ci0KLS8vIEZvciBGVExN
b2RlIGFuZCBGVExGb3JPU1JFbnRyeU1vZGUgY29tcGlsYXRpb25zLgotSlNfRVhQT1JUX1BSSVZB
VEUgV29ya2xpc3QmIGVuc3VyZUdsb2JhbEZUTFdvcmtsaXN0KCk7Ci1KU19FWFBPUlRfUFJJVkFU
RSBXb3JrbGlzdCogZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9yTnVsbCgpOwotCi1Xb3JrbGlz
dCYgZW5zdXJlR2xvYmFsV29ya2xpc3RGb3IoQ29tcGlsYXRpb25Nb2RlKTsKLQotLy8gU2ltcGxp
ZnkgZG9pbmcgdGhpbmdzIGZvciBhbGwgd29ya2xpc3RzLgotdW5zaWduZWQgbnVtYmVyT2ZXb3Jr
bGlzdHMoKTsKLVdvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVkIGluZGV4
KTsKLVdvcmtsaXN0KiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwodW5zaWduZWQgaW5k
ZXgpOwotV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleCh1bnNpZ25lZCBpbmRleCk7
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KLXZv
aWQgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jJik7Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3RJbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNj
MjY2ZjZmMzY1NjFhYzZlYzY0MjUyNTFhZGE4ZDZmNDJmMjAwYzguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdElubGluZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkRGR1BsYW5JbmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIGl0
ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVmlzaXRvciYgdmlzaXRvciwgVk0mIHZtLCBjb25zdCBGdW5j
JiBmdW5jKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMo
KTsgaS0tOykgewotICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4
aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKLSAgICAgICAgICAgIHdvcmtsaXN0LT5p
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIHZtLCBmdW5jKTsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIFdvcmtsaXN0Ojpp
dGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3ImIHZpc2l0b3IsIFZNJiB2bSwgY29uc3QgRnVu
YyYgZnVuYykKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9jayB9OwotICAgIGZvciAoUGxh
bk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwot
ICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKLSAgICB9
Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
LCB0eXBlbmFtZSBWaXNpdG9yPgotdm9pZCBpdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKFZpc2l0b3Im
LCBWTSYsIGNvbnN0IEZ1bmMmKQotewotfQotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuaAppbmRleCBlYmM2MzMzYjIyMDEzNjhhZjRjYTc1YWJkNzNlZjUwNmM2NGM0NTgxLi5h
YTljNmUzNjljMTU5N2Q5ZmM4OTEyNmRlOWNlNzRkZmVkMTNhZDFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxF
KEZUTF9KSVQpCiAKLSNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKICNpbmNsdWRlICJGVExTdGF0
ZS5oIgorI2luY2x1ZGUgIkpJVFNhZmVwb2ludC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKIGV4dGVybiBjb25zdCBjaGFyKiBjb25zdCB0aWVyTmFtZTsKIAotdm9pZCBj
b21waWxlKFN0YXRlJiwgREZHOjpTYWZlcG9pbnQ6OlJlc3VsdCYpOwordm9pZCBjb21waWxlKFN0
YXRlJiwgU2FmZXBvaW50OjpSZXN1bHQmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAppbmRleCAxNzU5OTJlN2JkNTY3MDUz
ZjZlMWQ0NDMwMmM3MjY1MTRkMWU1ZTY1Li4xZWIxZDhhYTlkNjdmYWQ4NWJiODUyNThkM2VlZWJm
OWM5MDBkM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIH0KIAogICAgIHN3aXRjaCAo
Z3JhcGgubV9wbGFuLm1vZGUoKSkgewotICAgIGNhc2UgRlRMTW9kZTogeworICAgIGNhc2UgSklU
Q29tcGlsYXRpb25Nb2RlOjpGVEw6IHsKICAgICAgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAg
PSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOwogICAgICAgICBpZiAoY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbWFpblBhdGhKdW1wczsKQEAgLTE5MSw3
ICsxOTEsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAotICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CisgICAgY2FzZSBKSVRD
b21waWxhdGlvbk1vZGU6OkZUTEZvck9TUkVudHJ5OiB7CiAgICAgICAgIC8vIFdlIGp1bXAgdG8g
aGVyZSBzdHJhaWdodCBmcm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9m
IHRoZQogICAgICAgICAvLyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhp
bmcgc2hvdWxkIGJlIGdvb2QgdG8gZ28gLSBhdCB0aGlzCiAgICAgICAgIC8vIHBvaW50IHdlJ3Zl
IGV2ZW4gZG9uZSB0aGUgc3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFr
ZSB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBjMDQ3NTJkN2JkOWYxYjJmOGEyZWU1MzMxNTc4MTJlOWZmNTU1MWE5Li44MTY3ZmEzZDA1
MmMxMGJkZjFiNmY2NDkwY2UzNTkwN2RhZDhiZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0zNTksNyArMzU5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkpKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JP
U1JFbnRyeU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRyeSkgewogICAgICAgICAgICAgICAgIGF1
dG8qIGppdENvZGUgPSBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCk7CiAgICAg
ICAgICAgICAgICAgRml4ZWRWZWN0b3I8REZHOjpGbHVzaEZvcm1hdD4gYXJndW1lbnRGbHVzaEZv
cm1hdHMoY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkK
QEAgLTE5NDY3LDcgKzE5NDY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2Ugd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gYXQgbGVh
c3Qgc29tZSB2YWxpZGF0aW9uIHdoZW4gT1NSIGVudGVyaW5nLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NTExCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9w
bGFuLm1vZGUoKSAhPSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAgICAgICAgICAgICAgICAmJiBt
X2dyYXBoLm1fcGxhbi5tb2RlKCkgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JFbnRy
eSkgewogCiAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCiAgICAgICAgICAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29k
ZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmls
aXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAppbmRleCAxMGI4ODYyYzU5NThl
ZGJjNTlkMmExZTgzMTNkMzc3NzRhM2I4NGZlLi4wMWJkZWVjOWZkMzc5NmY0ZTQ3ZGJhZTcxMjBk
OWU2ZGFkZTZkYjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQyLDExICs0MiwxMSBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogZ3JhcGgo
Z3JhcGgpCiB7CiAgICAgc3dpdGNoIChncmFwaC5tX3BsYW4ubW9kZSgpKSB7Ci0gICAgY2FzZSBG
VExNb2RlOiB7CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDogewogICAgICAgICBq
aXRDb2RlID0gYWRvcHRSZWYobmV3IEpJVENvZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25N
b2RlOjpGVExGb3JPU1JFbnRyeTogewogICAgICAgICBSZWZQdHI8Rm9yT1NSRW50cnlKSVRDb2Rl
PiBjb2RlID0gYWRvcHRSZWYobmV3IEZvck9TUkVudHJ5SklUQ29kZSgpKTsKICAgICAgICAgY29k
ZS0+aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKGdyYXBoLm1fdm0sIGdyYXBoLm1fcHJvZmlsZWRCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkpOwogICAgICAgICBjb2RlLT5zZXRCeXRlY29kZUluZGV4KGdy
YXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmgKaW5kZXggZDI5NTNlMTBjYzlhMWRhYjZiNjc4MGZiMGYyZDY0MzU1ZGI3Yzgz
Zi4uYTNlZmViZjFkYTc3ODhmZjMwM2U0ZjY4NGY3ODc5NWExZGFjY2M1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDEyICs1MCwxMiBAQCBjbGFzcyBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlOwogCiBpbmxpbmUgYm9vbCB2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gREZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKERGRzo6
RlRMTW9kZSk7CisgICAgcmV0dXJuIERGRzo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChKSVRD
b21waWxhdGlvbk1vZGU6OkZUTCk7CiB9CiAKIGlubGluZSBib29sIHNob3VsZER1bXBEaXNhc3Nl
bWJseSgpCiB7Ci0gICAgcmV0dXJuIERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KERGRzo6RlRM
TW9kZSk7CisgICAgcmV0dXJuIERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMKTsKIH0KIAogY2xhc3MgU3RhdGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAppbmRleCBjYmFkY2Y5ZTMyY2M5OTA5NzRhZTljNTc1YzM3NjlhYjJkOGEyZWFkLi5l
ZTI2ZjE3Yzk0ZDFhOGZlNjk0YmIxZTQzZDAyYTFmYTY0NDBjYzc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1Nl
dElubGluZXMuaCIKICNpbmNsdWRlICJDb2xsZWN0aW5nU2NvcGUuaCIKICNpbmNsdWRlICJDb25z
ZXJ2YXRpdmVSb290cy5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC00Niw3ICs0NSw3IEBACiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCi0jaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKKyNp
bmNsdWRlICJKSVRXb3JrbGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVk
ZSAiSlNXZWFrTWFwLmgiCkBAIC02MzksMTcgKzYzOCwxOSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRl
QWxsSklUUGxhbnMoKQogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVy
bjsKICNpZiBFTkFCTEUoSklUKQotICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlz
dCgpLmNvbXBsZXRlQWxsRm9yVk0obV92bSk7CisgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2Jh
bFdvcmtsaXN0KCkuY29tcGxldGVBbGxQbGFuc0ZvclZNKG1fdm0pOwogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0obV92bSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFZpc2l0b3I+Ci12b2lkIEhlYXA6Oml0ZXJhdGVF
eGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEZ1
bmMmIGZ1bmMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBIZWFwOjppdGVyYXRl
RXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBG
dW5jdGlvbjx2b2lkKENvZGVCbG9jayopPiYgZnVuYykKIHsKICAgICBtX2NvZGVCbG9ja3MtPml0
ZXJhdGVDdXJyZW50bHlFeGVjdXRpbmcoZnVuYyk7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KQotICAgICAgICBERkc6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwgbV92bSwgZnVu
Yyk7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xp
c3QoKS5pdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKHZpc2l0b3IsIG1fdm0sIGZ1bmMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KQEAgLTcyNiwxMiArNzI3
LDExIEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKIAogdm9pZCBIZWFwOjpyZW1vdmVEZWFk
Q29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKQogewotI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlm
ICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3Rp
bmdXb3JrbGlzdEZvckluZGV4KGkpLnJlbW92ZURlYWRQbGFucyhtX3ZtKTsKLSNlbmRpZgorI2lm
IEVOQUJMRShKSVQpCisgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucmVt
b3ZlRGVhZFBsYW5zKG1fdm0pOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKIHN0cnVjdCBH
YXRoZXJFeHRyYUhlYXBEYXRhIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CkBAIC0xNjUz
LDE0ICsxNjUzLDYgQEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIGNv
bm4pCiAgICAgICAgICAgICB2aXNpdG9yLnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoTm9Mb2NraW5n
TmVjZXNzYXJ5KTsKICAgICAgICAgfSk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChPcHRp
b25zOjp1c2VKSVQoKSkgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7
Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0
ZUFsbEZvclZNKG1fdm0pCi0gICAgICAgICAgICAmJiBjb25uID09IEdDQ29uZHVjdG9yOjpDb2xs
ZWN0b3IpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShjb25uKTsKICAgICAKICAgICBpZiAoYXV0byogc2hh
ZG93Q2hpY2tlbiA9IHZtKCkuc2hhZG93Q2hpY2tlbigpKQpAQCAtMTgwNiw3ICsxNzk4LDYgQEAg
dm9pZCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KCkKICAgICBSRUxFQVNFX0FTU0VSVChtX3dv
cmxkU3RhdGUubG9hZCgpICYgaGFzQWNjZXNzQml0KTsKICAgICBSRUxFQVNFX0FTU0VSVCghKG1f
d29ybGRTdGF0ZS5sb2FkKCkgJiBzdG9wcGVkQml0KSk7CiAgICAgCi0gICAgaGFuZGxlR0NEaWRK
SVQoKTsKICAgICBoYW5kbGVOZWVkRmluYWxpemUoKTsKICAgICBtX211dGF0b3JEaWRSdW4gPSB0
cnVlOwogfQpAQCAtMTkyMyw3ICsxOTE0LDYgQEAgdm9pZCBIZWFwOjphY3F1aXJlQWNjZXNzU2xv
dygpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSk7CiAg
ICAgICAgIHVuc2lnbmVkIG5ld1N0YXRlID0gb2xkU3RhdGUgfCBoYXNBY2Nlc3NCaXQ7CiAgICAg
ICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgbmV3U3Rh
dGUpKSB7Ci0gICAgICAgICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgICAgICAgICAgaGFuZGxl
TmVlZEZpbmFsaXplKCk7CiAgICAgICAgICAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwogICAg
ICAgICAgICAgc3RvcElmTmVjZXNzYXJ5KCk7CkBAIC0yMDAzLDE4ICsxOTkzLDYgQEAgdm9pZCBI
ZWFwOjpyZWxpbnF1aXNoQ29ubigpCiAgICAgd2hpbGUgKHJlbGlucXVpc2hDb25uKG1fd29ybGRT
dGF0ZS5sb2FkKCkpKSB7IH0KIH0KIAotYm9vbCBIZWFwOjpoYW5kbGVHQ0RpZEpJVCh1bnNpZ25l
ZCBvbGRTdGF0ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIGhhc0FjY2Vzc0Jp
dCk7Ci0gICAgaWYgKCEob2xkU3RhdGUgJiBnY0RpZEpJVEJpdCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUs
IG9sZFN0YXRlICYgfmdjRGlkSklUQml0KSkgewotICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5n
Q29kZUZlbmNlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6aGFuZGxlTmVlZEZpbmFsaXplKHVuc2ln
bmVkIG9sZFN0YXRlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgaGFzQWNjZXNz
Qml0KTsKQEAgLTIwMzIsMjYgKzIwMTAsMTEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6aGFu
ZGxlTmVlZEZpbmFsaXplKHVuc2lnbmVkIG9sZFN0YXRlKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEhlYXA6OmhhbmRsZUdDRGlkSklUKCkKLXsKLSAgICB3aGlsZSAoaGFuZGxlR0NEaWRK
SVQobV93b3JsZFN0YXRlLmxvYWQoKSkpIHsgfQotfQotCiB2b2lkIEhlYXA6OmhhbmRsZU5lZWRG
aW5hbGl6ZSgpCiB7CiAgICAgd2hpbGUgKGhhbmRsZU5lZWRGaW5hbGl6ZShtX3dvcmxkU3RhdGUu
bG9hZCgpKSkgeyB9CiB9CiAKLXZvaWQgSGVhcDo6c2V0R0NEaWRKSVQoKQotewotICAgIG1fd29y
bGRTdGF0ZS50cmFuc2FjdGlvbigKLSAgICAgICAgWyZdICh1bnNpZ25lZCYgc3RhdGUpIC0+IGJv
b2wgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUgJiBzdG9wcGVkQml0KTsKLSAg
ICAgICAgICAgIHN0YXRlIHw9IGdjRGlkSklUQml0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0pOwotfQotCiB2b2lkIEhlYXA6OnNldE5lZWRGaW5hbGl6ZSgpCiB7CiAgICAg
bV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobmVlZEZpbmFsaXplQml0KTsKQEAgLTIxNjcsMTQgKzIx
MzAsMTMgQEAgdm9pZCBIZWFwOjpzd2VlcEluRmluYWxpemUoKQogCiB2b2lkIEhlYXA6OnN1c3Bl
bmRDb21waWxlclRocmVhZHMoKQogewotI2lmIEVOQUJMRShERkdfSklUKQorI2lmIEVOQUJMRShK
SVQpCiAgICAgLy8gV2UgZW5zdXJlIHRoZSB3b3JrbGlzdHMgc28gdGhhdCBpdCdzIG5vdCBwb3Nz
aWJsZSBmb3IgdGhlIG11dGF0b3IgdG8gc3RhcnQgYSBuZXcgd29ya2xpc3QKICAgICAvLyBhZnRl
ciB3ZSBoYXZlIHN1c3BlbmRlZCB0aGUgb25lcyB0aGF0IGhlIGhhZCBzdGFydGVkIGJlZm9yZS4g
VGhhdCdzIG5vdCB2ZXJ5IGV4cGVuc2l2ZSBzaW5jZQogICAgIC8vIHRoZSB3b3JrbGlzdHMgdXNl
IEF1dG9tYXRpY1RocmVhZHMgYW55d2F5LgogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xp
c3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZW5zdXJlV29ya2xpc3RGb3JJbmRleChpKS5zdXNw
ZW5kQWxsVGhyZWFkcygpOworICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LnN1c3BlbmRBbGxUaHJlYWRzKCk7CiAjZW5kaWYKIH0KIApAQCAtMjM4NiwxMSArMjM0OCwxMCBA
QCB2b2lkIEhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24oKQogCiB2b2lkIEhlYXA6OnJlc3VtZUNv
bXBpbGVyVGhyZWFkcygpCiB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCisjaWYgRU5BQkxFKEpJVCkK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6
OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS5yZXN1bWVBbGxUaHJlYWRzKCk7CisgICAgSklU
V29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkucmVzdW1lQWxsVGhyZWFkcygpOwogI2Vu
ZGlmCiB9CiAKQEAgLTI5MDIsMjYgKzI4NjMsMjUgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMoKQogICAgICAgICBDb25zdHJhaW50Vm9sYXRpbGl0eTo6R3JleWVkQnlNYXJraW5nLAog
ICAgICAgICBDb25zdHJhaW50UGFyYWxsZWxpc206OlBhcmFsbGVsKTsKICAgICAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoSklUKQogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkg
ewogICAgICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgICAgICJEdyIsICJERkcg
V29ya2xpc3RzIiwKKyAgICAgICAgICAgICJKdyIsICJKSVQgV29ya2xpc3QiLAogICAgICAgICAg
ICAgTUFLRV9NQVJLSU5HX0NPTlNUUkFJTlRfRVhFQ1VUT1JfUEFJUigoW3RoaXNdIChhdXRvJiB2
aXNpdG9yKSB7Ci0gICAgICAgICAgICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2Nv
cGUodmlzaXRvciwgUm9vdE1hcmtSZWFzb246OkRGR1dvcmtMaXN0cyk7CisgICAgICAgICAgICAg
ICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtSZWFz
b246OkpJVFdvcmtMaXN0KTsKIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsK
KyAgICAgICAgICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS52aXNp
dFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5uZWNlc3NhcnkuCiAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjgyOQotICAgICAgICAgICAgICAgIERGRzo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9y
LAorICAgICAgICAgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLml0
ZXJhdGVDb2RlQmxvY2tzRm9yR0ModmlzaXRvciwKICAgICAgICAgICAgICAgICAgICAgbV92bSwK
ICAgICAgICAgICAgICAgICAgICAgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChjb2RlQmxvY2spOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCB2aXNpdG9yKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSklUIFdvcmtsaXN0czpcbiIsIHZpc2l0b3IpOwogICAgICAg
ICAgICAgfSkpLAogICAgICAgICAgICAgQ29uc3RyYWludFZvbGF0aWxpdHk6OkdyZXllZEJ5TWFy
a2luZyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IDA4MmQzMTFhYzY2
MWJiNDBkMWI2MGYzNTFmZDdjNTA2Zjk5ZTA5MWUuLmUyNzFlZjYzMTY4NDdhMTIyODMyN2JiOGQ1
MDM1ZmY0MDA0NmM4Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTk3LDcgKzk3
LDYgQEAgY2xhc3MgSlNDR0xpYldyYXBwZXJPYmplY3Q7CiAKIG5hbWVzcGFjZSBERkcgewogY2xh
c3MgU3BlY3VsYXRpdmVKSVQ7Ci1jbGFzcyBXb3JrbGlzdDsKIH0KIAogI2lmIEVOQUJMRShERkdf
SklUKSAmJiBBU1NFUlRfRU5BQkxFRApAQCAtNDk1LDE2ICs0OTQsMTIgQEAgcHJpdmF0ZToKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFjcXVpcmVBY2Nlc3NTbG93KCk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZWxlYXNlQWNjZXNzU2xvdygpOwogICAgIAotICAgIGJvb2wgaGFu
ZGxlR0NEaWRKSVQodW5zaWduZWQpOwotICAgIHZvaWQgaGFuZGxlR0NEaWRKSVQoKTsKLSAgICAK
ICAgICBib29sIGhhbmRsZU5lZWRGaW5hbGl6ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBoYW5kbGVO
ZWVkRmluYWxpemUoKTsKICAgICAKICAgICBib29sIHJlbGlucXVpc2hDb25uKHVuc2lnbmVkKTsK
ICAgICB2b2lkIGZpbmlzaFJlbGlucXVpc2hpbmdDb25uKCk7CiAgICAgCi0gICAgdm9pZCBzZXRH
Q0RpZEpJVCgpOwogICAgIHZvaWQgc2V0TmVlZEZpbmFsaXplKCk7CiAgICAgdm9pZCB3YWl0V2hp
bGVOZWVkRmluYWxpemUoKTsKICAgICAKQEAgLTU3OSw4ICs1NzQsOCBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBvdmVyQ3JpdGljYWxNZW1vcnlUaHJlc2hvbGQoTWVtb3J5VGhyZXNob2xkQ2FsbFR5
cGUgbWVtb3J5VGhyZXNob2xkQ2FsbFR5cGUgPSBNZW1vcnlUaHJlc2hvbGRDYWxsVHlwZTo6Q2Fj
aGVkKTsKICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBWaXNpdG9y
PgotICAgIHZvaWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRv
ciYsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZv
aWQgaXRlcmF0ZUV4ZWN1dGluZ0FuZENvbXBpbGluZ0NvZGVCbG9ja3MoVmlzaXRvciYsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoQ29kZUJsb2NrKik+Jik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYywgdHlwZW5hbWUgVmlzaXRvcj4KICAgICB2b2lkIGl0ZXJhdGVFeGVjdXRpbmdBbmRD
b21waWxpbmdDb2RlQmxvY2tzV2l0aG91dEhvbGRpbmdMb2NrcyhWaXNpdG9yJiwgY29uc3QgRnVu
YyYpOwpAQCAtNzE2LDkgKzcxMSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBtdXRhdG9ySGFzQ29ubkJpdCA9IDF1IDw8IDB1OyAvLyBNdXN0IGFsc28gYmUgcHJv
dGVjdGVkIGJ5IHRocmVhZExvY2suCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzdG9w
cGVkQml0ID0gMXUgPDwgMXU7IC8vIE9ubHkgc2V0IHdoZW4gIWhhc0FjY2Vzc0JpdAogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaGFzQWNjZXNzQml0ID0gMXUgPDwgMnU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBnY0RpZEpJVEJpdCA9IDF1IDw8IDN1OyAvLyBTZXQgd2hl
biB0aGUgR0MgZGlkIHNvbWUgSklUaW5nLCBzbyBvbiByZXN1bWUgd2UgbmVlZCB0byBjcHVpZC4K
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG5lZWRGaW5hbGl6ZUJpdCA9IDF1IDw8IDR1
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8
PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZh
cmlhYmxlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbmVlZEZpbmFsaXplQml0ID0g
MXUgPDwgM3U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0Jp
dCA9IDF1IDw8IDR1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25k
aXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAg
Ym9vbCBtX3dvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fdmlzaXRSYWNlTG9j
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jvb3RNYXJrUmVhc29u
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Sb290TWFya1JlYXNvbi5oCmluZGV4IDIz
ZmI1OTg0ODk4N2ZjNWNmNWJiZjc1MzQxNWI1OWMzNGFhNDdhNGQuLmYyMDk2MzM2YTJkMmEzNjE1
MzMwMTJiNDFlMjgyZjUwNTAzZTU1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Jvb3RNYXJrUmVhc29uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Um9vdE1hcmtSZWFzb24uaApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2
KFdlYWtNYXBTcGFjZSkgXAogICAgIHYoV2Vha1NldHMpIFwKICAgICB2KE91dHB1dCkgXAotICAg
IHYoREZHV29ya0xpc3RzKSBcCisgICAgdihKSVRXb3JrTGlzdCkgXAogICAgIHYoQ29kZUJsb2Nr
cykgXAogICAgIHYoRE9NR0NPdXRwdXQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWYyY2I1Y2NiMWFhOWFjNWU0NGE2MDIz
ZDU0NmZkYTM0ZmQzOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQmFzZWxpbmVKSVRQbGFuLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2Ug
SlNDIHsKKworQmFzZWxpbmVKSVRQbGFuOjpCYXNlbGluZUpJVFBsYW4oQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICA6IEpJ
VFBsYW4oSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSwgY29kZUJsb2NrKQorICAgICwgbV9q
aXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
Cit7CisgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7Cit9
CisKK2F1dG8gQmFzZWxpbmVKSVRQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkgLT4gQ29tcGls
YXRpb25QYXRoCit7CisgICAgbV9qaXQuY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHJldHVybiBCYXNlbGluZVBhdGg7Cit9CisKK3Np
emVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9q
aXQuY29kZVNpemUoKTsKK30KKworQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpm
aW5hbGl6ZSgpCit7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxp
emVPbk1haW5UaHJlYWQoKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGls
YXRpb25GYWlsZWQ6CisgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJk
ZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKKyAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQu
Iik7CisgICAgICAgIG1fY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKKyAgICAgICAg
bV9jb2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIFdURjo6Y3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UoKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLiIpOworICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRQbGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg1NmUwMTA4YzU2OTc2OTM1MzZjZWVjMmNhMTU1Zjgw
OGMzMjhjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSklUUGxhbi5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgQmFzZWxpbmVKSVRQbGFuIGZpbmFsIDogcHVibGljIEpJVFBsYW4geworICAg
IHVzaW5nIEJhc2UgPSBKSVRQbGFuOworCitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRQbGFuKENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisKKyAg
ICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbCgpIGZpbmFsOworICAgIHNpemVf
dCBjb2RlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXpl
KCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSklUIG1faml0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCmluZGV4IGJhMmRlM2I2MGZhZGNlZjVjZTU5ZGIzODU2ZTYwMGEzZDM0NDIwOGEuLjU1NTYz
MDM3YWViNThmZWM5YjNmMDNmN2NmZWUxZmMwZGUzZWNlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKQEAgLTY2MiwxMCArNjYyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIE1vbm90b25pY1RpbWUgYmVmb3JlIHsg
fTsKLSAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkKLSAgICAgICAgYmVm
b3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgCiAgICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChs
ZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgpAQCAtODIxLDIwICs4MTcsNiBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkp
OwogCiAgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBM
aW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxp
bmVKSVQsIGVmZm9ydCkpOwotCi0gICAgTW9ub3RvbmljVGltZSBhZnRlciB7IH07Ci0gICAgaWYg
KFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKLSAgICAgICAgYWZ0ZXIgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKLQotICAgICAgICBpZiAoT3B0aW9uczo6cmVwb3J0VG90YWxDb21w
aWxlVGltZXMoKSkKLSAgICAgICAgICAgIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBhZnRl
ciAtIGJlZm9yZTsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygp
KSkgewotICAgICAgICBDU3RyaW5nIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxvY2tO
YW1lLCAiIHdpdGggQmFzZWxpbmUgSklUIGludG8gIiwgbV9saW5rQnVmZmVyLT5zaXplKCksICIg
Ynl0ZXMgaW4gIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcy5cbiIpOwot
ICAgIH0KLQogICAgIGxpbmsoKTsKIH0KIApAQCAtMTAxOCw2ICsxMDAwLDEzIEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQogICAgIHJldHVybiBDb21waWxh
dGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3NpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbGlua0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbGlu
a0J1ZmZlci0+c2l6ZSgpOworfQorCiBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21w
aWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVw
YXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKQEAgLTEwNzQsMjEgKzEwNjMsMTEgQEAgaW50IEpJVDo6
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAt
IDEpLm9mZnNldCgpOwogfQogCi1ib29sIEpJVDo6cmVwb3J0Q29tcGlsZVRpbWVzKCkKLXsKLSAg
ICByZXR1cm4gT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkgfHwgT3B0aW9uczo6cmVwb3J0
QmFzZWxpbmVDb21waWxlVGltZXMoKTsKLX0KLQotYm9vbCBKSVQ6OmNvbXB1dGVDb21waWxlVGlt
ZXMoKQotewotICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKSB8fCBPcHRpb25zOjpyZXBv
cnRUb3RhbENvbXBpbGVUaW1lcygpOwotfQotCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJ
VDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBy
ZXN1bHQ7CiAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKLSAg
ICAgICAgcmVzdWx0LmFkZCgiVG90YWwgQ29tcGlsZSBUaW1lIiwgdG90YWxCYXNlbGluZUNvbXBp
bGVUaW1lICsgdG90YWxERkdDb21waWxlVGltZSArIHRvdGFsRlRMQ29tcGlsZVRpbWUpOworICAg
ICAgICByZXN1bHQuYWRkKCJUb3RhbCBDb21waWxlIFRpbWUiLCB0b3RhbENvbXBpbGVUaW1lKCkp
OwogICAgICAgICByZXN1bHQuYWRkKCJCYXNlbGluZSBDb21waWxlIFRpbWUiLCB0b3RhbEJhc2Vs
aW5lQ29tcGlsZVRpbWUpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICByZXN1bHQuYWRk
KCJERkcgQ29tcGlsZSBUaW1lIiwgdG90YWxERkdDb21waWxlVGltZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAppbmRleCBjYjhiNGExMDA2ZTBhYTk4YzRmZmEyOTk1ZmJlZTJlYjllZDk1Yzc3Li43
NWM5Y2I5NmIxMzY1MzJmMDg2MWYyZjBhODA1OGVmYzZiMDU2YjI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKQEAgLTIxNiw2ICsyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
ICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVh
ZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg5ZThlMDRl
ZTEyNjM3ODg2ZmQyOGY0YTRiYWI2MGIwYzQxNTZkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25LZXkuaCIKKworI2lm
IEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3ZvaWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJv
ZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzczY2EyYWEwNGQwZmZlN2RlY2U1NDU0MDBjYzMzZmIxNmZj
Y2ZlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25LZXkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSklU
Q29tcGlsYXRpb25Nb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIENvZGVCbG9ja1NldDsKKworY2xhc3Mg
SklUQ29tcGlsYXRpb25LZXkgeworcHVibGljOgorICAgIEpJVENvbXBpbGF0aW9uS2V5KCkKKyAg
ICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBtX21vZGUoSklUQ29t
cGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAg
ICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgICwgbV9tb2RlKEpJVENvbXBp
bGF0aW9uTW9kZTo6REZHKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsYXRpb25L
ZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAg
ICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICAgICAgLCBtX21vZGUo
bW9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1f
cHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29t
cGlsYXRpb247CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQorICAgIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgICAg
ICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6
UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0aWNfY2FzdDxz
dGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgSklUQ29tcGlsYXRpb25N
b2RlIG1fbW9kZTsKK307CisKK3N0cnVjdCBKSVRDb21waWxhdGlvbktleUhhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBKSVRDb21waWxhdGlv
bktleSYgYSwgY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPEpTQzo6SklUQ29tcGlsYXRpb25LZXk+IDogSlNDOjpKSVRDb21waWxhdGlv
bktleUhhc2ggeyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpKSVRDb21waWxhdGlvbktleT4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpKSVRDb21waWxhdGlvbktleT4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29tcGlsYXRpb25Nb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGls
YXRpb25Nb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTlkMzk0YTQ2N2M1ZmRkNjhmZmUyZjljMmZiNTI1
NmE3NDIyMDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbk1vZGUuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpJVENvbXBpbGF0aW9uTW9kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOgor
ICAgICAgICBvdXQucHJpbnQoIkludmFsaWRDb21waWxhdGlvbk1vZGUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZToKKyAgICAgICAgb3V0
LnByaW50KCJCYXNlbGluZU1vZGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSklUQ29t
cGlsYXRpb25Nb2RlOjpERkc6CisgICAgICAgIG91dC5wcmludCgiREZHTW9kZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZUTDoKKyAgICAgICAgb3V0
LnByaW50KCJGVExNb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpJVENvbXBpbGF0
aW9uTW9kZTo6RlRMRm9yT1NSRW50cnk6CisgICAgICAgIG91dC5wcmludCgiRlRMRm9yT1NSRW50
cnlNb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlv
bk1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25Nb2RlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2JjMGUwN2ZmNTNjYTMxNTk5YjU2OGVmYTIxNTkxYTYzMmNiOTU0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25N
b2RlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBKSVRDb21waWxhdGlvbk1vZGUgewor
ICAgIEludmFsaWRDb21waWxhdGlvbiwKKyAgICBCYXNlbGluZSwKKyAgICBERkcsCisgICAgRlRM
LAorICAgIEZUTEZvck9TUkVudHJ5Cit9OworCitpbmxpbmUgYm9vbCBpc0ZUTChKSVRDb21waWxh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbXBp
bGF0aW9uTW9kZTo6RlRMOgorICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpGVExGb3JPU1JF
bnRyeToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkpJVENvbXBpbGF0aW9u
TW9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKaW5kZXggOGVkZGY2ZGJjMjNlYWU3ZjkyMDAxNGQ4NGU1MGEwOTAw
N2IzYzdjZi4uMjFhZjM2NTMwOWQyNzkzMzcxZGU2ZWI0MDBiNDQ2OGFhODM3MGIyNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0zMiwxMSArMzIs
OSBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIK
LSNpbmNsdWRlICJERkdDb21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIK
ICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgotI2luY2x1
ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25GdXp6LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCkBAIC00Niw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUg
IkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSklUV29y
a2xpc3QuaCIKICNpbmNsdWRlICJKU0FzeW5jRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0FzeW5j
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uLmgiCkBAIC0x
ODk4LDQwICsxODk3LDI4IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25PcHRp
bWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAKLSAgICAvLyBXZSBjYW5u
b3QgYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXN5bmNocm9ub3VzIGNvbXBpbGF0aW9uIGFuZCBhbHNv
IGhhdmUgYW4gb3B0aW1pemVkCi0gICAgLy8gcmVwbGFjZW1lbnQuCi0gICAgREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKTsKLSAg
ICBBU1NFUlQoCi0gICAgICAgICF3b3JrbGlzdAotICAgICAgICB8fCAhKHdvcmtsaXN0LT5jb21w
aWxhdGlvblN0YXRlKERGRzo6Q29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBERkc6OkRGR01vZGUp
KSAhPSBERkc6OldvcmtsaXN0OjpOb3RLbm93bgotICAgICAgICAmJiBjb2RlQmxvY2stPmhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkpKTsKLQotICAgIERGRzo6V29ya2xpc3Q6OlN0YXRlIHdvcmts
aXN0U3RhdGU7Ci0gICAgaWYgKHdvcmtsaXN0KSB7Ci0gICAgICAgIC8vIFRoZSBjYWxsIHRvIERG
Rzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKCkgd2lsbCBjb21wbGV0ZSBh
bGwgcmVhZHkKLSAgICAgICAgLy8gKGkuZS4gY29tcGlsZWQpIGNvZGUgYmxvY2tzLiBCdXQgaWYg
aXQgY29tcGxldGVzIG91cnMsIHdlIGFsc28gbmVlZCB0byBrbm93Ci0gICAgICAgIC8vIHdoYXQg
dGhlIHJlc3VsdCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBhdHRlbXB0IE9T
UiBvciBpbW1lZGlhdGUKLSAgICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIFRoaXMgd2lsbCBoYXZl
IGFscmVhZHkgYWxzbyBzZXQgdGhlIGFwcHJvcHJpYXRlIEpJVCBleGVjdXRpb24KLSAgICAgICAg
Ly8gY291bnQgdGhyZXNob2xkIGRlcGVuZGluZyBvbiB3aGF0IGhhcHBlbmVkLCBzbyBpZiB0aGUg
Y29tcGlsYXRpb24gd2FzIGFueXRoaW5nCi0gICAgICAgIC8vIGJ1dCBzdWNjZXNzZnVsIHdlIGp1
c3Qgd2FudCB0byByZXR1cm4gZWFybHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RTdGF0ZSA9
PQotICAgICAgICAvLyBERkc6OldvcmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCi0gICAgICAgIAot
ICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IGp1c3QgY2Fs
bGVkIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0YXRlKCkKLSAgICAgICAgLy8gaGVyZSwgYW5kIGlm
IGl0IHJldHVybmVkIENvbXBpbGVkLCB3ZSBjb3VsZCBoYXZlIHRoZW4gY2FsbGVkCi0gICAgICAg
IC8vIGNvbXBsZXRlQW5kU2NoZWR1bGVPU1IoKSBiZWxvdy4gQnV0IHRoYXQgd291bGQgaGF2ZSBt
ZWFudCB0aGF0IGl0IGNvdWxkIHRha2UKLSAgICAgICAgLy8gbG9uZ2VyIGZvciBjb2RlIGJsb2Nr
cyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkgd291bGQgb25seSBjb21wbGV0ZSB3aGVuICp0aGVpcioK
LSAgICAgICAgLy8gZXhlY3V0aW9uIGNvdW50IHRyaWdnZXIgZmlyZWQ7IGJ1dCB0aGF0IGNvdWxk
IHRha2UgYSB3aGlsZSBzaW5jZSB0aGUgZmlyaW5nIGlzCi0gICAgICAgIC8vIHJhY3kuIEl0IGNv
dWxkIGFsc28gbWVhbiB0aGF0IGNvZGUgYmxvY2tzIHRoYXQgbmV2ZXIgcnVuIGFnYWluIGFmdGVy
IGJlaW5nCi0gICAgICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUgd29ya2xpc3QgdW50
aWwgbmV4dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCi0gICAgICAgIC8vIHByb2JhYmx5IGEg
d2FzdGUgb2YgbWVtb3J5LiBPdXIgZ29hbCBoZXJlIGlzIHRvIGNvbXBsZXRlIGNvZGUgYmxvY2tz
IGFzIHNvb24gYXMKLSAgICAgICAgLy8gcG9zc2libGUgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhl
IGNoYW5jZXMgb2YgdXMgZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUgYWZ0ZXIKLSAgICAgICAgLy8g
b3B0aW1pemVkIGNvZGUgaXMgYWxyZWFkeSBhdmFpbGFibGUuCi0gICAgICAgIHdvcmtsaXN0U3Rh
dGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCi0gICAgICAgICAgICB2
bSwgREZHOjpDb21waWxhdGlvbktleShjb2RlQmxvY2ssIERGRzo6REZHTW9kZSkpOwotICAgIH0g
ZWxzZQotICAgICAgICB3b3JrbGlzdFN0YXRlID0gREZHOjpXb3JrbGlzdDo6Tm90S25vd247Ci0K
LSAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAg
ICAvLyBUaGUgY2FsbCB0byBKSVRXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
KSB3aWxsIGNvbXBsZXRlIGFsbCByZWFkeQorICAgIC8vIChpLmUuIGNvbXBpbGVkKSBjb2RlIGJs
b2Nrcy4gQnV0IGlmIGl0IGNvbXBsZXRlcyBvdXJzLCB3ZSBhbHNvIG5lZWQgdG8ga25vdworICAg
IC8vIHdoYXQgdGhlIHJlc3VsdCB3YXMgc28gdGhhdCB3ZSBkb24ndCBwbG93IGFoZWFkIGFuZCBh
dHRlbXB0IE9TUiBvciBpbW1lZGlhdGUKKyAgICAvLyByZW9wdGltaXphdGlvbi4gVGhpcyB3aWxs
IGhhdmUgYWxyZWFkeSBhbHNvIHNldCB0aGUgYXBwcm9wcmlhdGUgSklUIGV4ZWN1dGlvbgorICAg
IC8vIGNvdW50IHRocmVzaG9sZCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCwgc28gaWYgdGhl
IGNvbXBpbGF0aW9uIHdhcyBhbnl0aGluZworICAgIC8vIGJ1dCBzdWNjZXNzZnVsIHdlIGp1c3Qg
d2FudCB0byByZXR1cm4gZWFybHkuIFNlZSB0aGUgY2FzZSBmb3Igd29ya2xpc3RTdGF0ZSA9PQor
ICAgIC8vIEpJVFdvcmtsaXN0OjpDb21waWxlZCwgYmVsb3cuCisKKyAgICAvLyBOb3RlIHRoYXQg
d2UgY291bGQgaGF2ZSBhbHRlcm5hdGl2ZWx5IGp1c3QgY2FsbGVkIFdvcmtsaXN0Ojpjb21waWxh
dGlvblN0YXRlKCkKKyAgICAvLyBoZXJlLCBhbmQgaWYgaXQgcmV0dXJuZWQgQ29tcGlsZWQsIHdl
IGNvdWxkIGhhdmUgdGhlbiBjYWxsZWQKKyAgICAvLyBjb21wbGV0ZUFuZFNjaGVkdWxlT1NSKCkg
YmVsb3cuIEJ1dCB0aGF0IHdvdWxkIGhhdmUgbWVhbnQgdGhhdCBpdCBjb3VsZCB0YWtlCisgICAg
Ly8gbG9uZ2VyIGZvciBjb2RlIGJsb2NrcyB0byBiZSBjb21wbGV0ZWQ6IHRoZXkgd291bGQgb25s
eSBjb21wbGV0ZSB3aGVuICp0aGVpcioKKyAgICAvLyBleGVjdXRpb24gY291bnQgdHJpZ2dlciBm
aXJlZDsgYnV0IHRoYXQgY291bGQgdGFrZSBhIHdoaWxlIHNpbmNlIHRoZSBmaXJpbmcgaXMKKyAg
ICAvLyByYWN5LiBJdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCBjb2RlIGJsb2NrcyB0aGF0IG5ldmVy
IHJ1biBhZ2FpbiBhZnRlciBiZWluZworICAgIC8vIGNvbXBpbGVkIHdvdWxkIHNpdCBvbiB0aGUg
d29ya2xpc3QgdW50aWwgbmV4dCBHQy4gVGhhdCdzIGZpbmUsIGJ1dCBpdCdzCisgICAgLy8gcHJv
YmFibHkgYSB3YXN0ZSBvZiBtZW1vcnkuIE91ciBnb2FsIGhlcmUgaXMgdG8gY29tcGxldGUgY29k
ZSBibG9ja3MgYXMgc29vbiBhcworICAgIC8vIHBvc3NpYmxlIGluIG9yZGVyIHRvIG1pbmltaXpl
IHRoZSBjaGFuY2VzIG9mIHVzIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlIGFmdGVyCisgICAgLy8g
b3B0aW1pemVkIGNvZGUgaXMgYWxyZWFkeSBhdmFpbGFibGUuCisgICAgSklUV29ya2xpc3Q6OlN0
YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5j
b21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgdm0sIEpJVENvbXBpbGF0aW9uS2V5
KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpKTsKKworICAgIGlmICh3b3JrbGlz
dFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxpbmcpIHsKICAgICAgICAgQ09ERUJMT0NLX0xP
R19FVkVOVChjb2RlQmxvY2ssICJkZWxheU9wdGltaXplVG9ERkciLCAoImNvbXBpbGluZyIpKTsK
ICAgICAgICAgLy8gV2UgY2Fubm90IGJlIGluIHRoZSBwcm9jZXNzIG9mIGFzeW5jaHJvbm91cyBj
b21waWxhdGlvbiBhbmQgYWxzbyBoYXZlIGFuIG9wdGltaXplZAogICAgICAgICAvLyByZXBsYWNl
bWVudC4KQEAgLTE5NDAsNyArMTkyNyw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25PcHRpbWl6ZSwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoVk0qIHZtUG9pbnRlciwKICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChudWxscHRyLCBudWxscHRyKTsKICAgICB9CiAKLSAgICBp
ZiAod29ya2xpc3RTdGF0ZSA9PSBERkc6OldvcmtsaXN0OjpDb21waWxlZCkgeworICAgIGlmICh3
b3JrbGlzdFN0YXRlID09IEpJVFdvcmtsaXN0OjpDb21waWxlZCkgewogICAgICAgICAvLyBJZiB3
ZSBkb24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBidXQgd2UgZGlkIGp1c3QgZ2V0
IGNvbXBpbGVkLCB0aGVuCiAgICAgICAgIC8vIHRoZSBjb21waWxhdGlvbiBmYWlsZWQgb3Igd2Fz
IGludmFsaWRhdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBleGVjdXRpb24gY291bnQKICAgICAgICAg
Ly8gdGhyZXNob2xkcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBieQpAQCAt
MjAwMyw3ICsxOTkwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk9wdGlt
aXplLCBTbG93UGF0aFJldHVyblR5cGUsIChWTSogdm1Qb2ludGVyLAogCiAgICAgICAgIENvZGVC
bG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7
CiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAg
ICAgICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9jaywgbnVsbHB0ciwgREZHOjpERkdNb2RlLCBi
eXRlY29kZUluZGV4LAorICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxs
cHRyLCBKSVRDb21waWxhdGlvbk1vZGU6OkRGRywgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAg
IG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpj
cmVhdGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjNkODgyM2Q4ZmZjMzM0NDEwNjk2MzEyYzUyM2ZjNjJiNDAxMDA3MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKQEAgLTAsMCArMSwyMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUUGxhbi5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkFic3RyYWN0U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2V4dGVybiBTZWNvbmRzIHRvdGFsQmFzZWxpbmVDb21waWxlVGltZTsKK2V4dGVybiBTZWNvbmRz
IHRvdGFsREZHQ29tcGlsZVRpbWU7CitleHRlcm4gU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1l
OworZXh0ZXJuIFNlY29uZHMgdG90YWxGVExERkdDb21waWxlVGltZTsKK2V4dGVybiBTZWNvbmRz
IHRvdGFsRlRMQjNDb21waWxlVGltZTsKKworSklUUGxhbjo6SklUUGxhbihKSVRDb21waWxhdGlv
bk1vZGUgbW9kZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBtX21vZGUobW9kZSkKKyAg
ICAsIG1fdm0oJmNvZGVCbG9jay0+dm0oKSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
K3sKK30KKwordm9pZCBKSVRQbGFuOjpjYW5jZWwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c3RhZ2UgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCk7CisgICAgQVNTRVJUKG1fdm0pOworICAg
IG1fc3RhZ2UgPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkOworICAgIG1fdm0gPSBudWxscHRyOwor
ICAgIG1fY29kZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBKSVRQbGFuOjpub3RpZnlDb21w
aWxpbmcoKQoreworICAgIG1fc3RhZ2UgPSBKSVRQbGFuU3RhZ2U6OkNvbXBpbGluZzsKK30KKwor
dm9pZCBKSVRQbGFuOjpub3RpZnlSZWFkeSgpCit7CisgICAgbV9zdGFnZSA9IEpJVFBsYW5TdGFn
ZTo6UmVhZHk7Cit9CisKK2F1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKK3sKKyAg
ICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb246CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBUaWVyOjpCYXNlbGluZTsKKyAgICBjYXNlIEpJVENvbXBpbGF0aW9uTW9kZTo6
QmFzZWxpbmU6CisgICAgICAgIHJldHVybiBUaWVyOjpCYXNlbGluZTsKKyAgICBjYXNlIEpJVENv
bXBpbGF0aW9uTW9kZTo6REZHOgorICAgICAgICByZXR1cm4gVGllcjo6REZHOworICAgIGNhc2Ug
SklUQ29tcGlsYXRpb25Nb2RlOjpGVEw6CisgICAgY2FzZSBKSVRDb21waWxhdGlvbk1vZGU6OkZU
TEZvck9TUkVudHJ5OgorICAgICAgICByZXR1cm4gVGllcjo6RlRMOworICAgIH0KK30KKworSklU
Q29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKK3sKKyAgICByZXR1cm4gSklUQ29tcGlsYXRp
b25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKK30KKwor
Ym9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKK3sKKyAgICBpZiAobV9zdGFn
ZSA9PSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFtX3ZtLT5oZWFwLmlzTWFya2VkKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKSVRQ
bGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIGlmIChtX3N0YWdlID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQobV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEpJVFBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoQWJzdHJhY3RTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mIGZ1bmMp
Cit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVz
IHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJh
cnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAg
IC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorICAgIGZ1
bmMobV9jb2RlQmxvY2spOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJVFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKEFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQyh2aXNpdG9yKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9j
ayk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSklUUGxhbjo6Y29tcHV0ZUNvbXBpbGVU
aW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcG9ydENvbXBpbGVUaW1lcygpCisgICAgICAg
IHx8IE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkKKyAgICAgICAgfHwgKG1fdm0g
JiYgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKTsKK30KKworYm9vbCBKSVRQbGFuOjpyZXBv
cnRDb21waWxlVGltZXMoKSBjb25zdAoreworICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21w
aWxlVGltZXMoKQorICAgICAgICB8fCAoT3B0aW9uczo6cmVwb3J0QmFzZWxpbmVDb21waWxlVGlt
ZXMoKSAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAg
fHwgKE9wdGlvbnM6OnJlcG9ydERGR0NvbXBpbGVUaW1lcygpICYmIG1fbW9kZSA9PSBKSVRDb21w
aWxhdGlvbk1vZGU6OkRGRykKKyAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9ydEZUTENvbXBpbGVU
aW1lcygpICYmIGlzRlRMKCkpOworfQorCit2b2lkIEpJVFBsYW46OmNvbXBpbGVJblRocmVhZChK
SVRXb3JrbGlzdFRocmVhZCogdGhyZWFkKQoreworICAgIG1fdGhyZWFkID0gdGhyZWFkOworCisg
ICAgTW9ub3RvbmljVGltZSBiZWZvcmU7CisgICAgQ1N0cmluZyBjb2RlQmxvY2tOYW1lOworICAg
IGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKQorICAgICAgICBiZWZvcmUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRpbWVz
KCkpKQorICAgICAgICBjb2RlQmxvY2tOYW1lID0gdG9DU3RyaW5nKCptX2NvZGVCbG9jayk7CisK
KyAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7CisKKyAgICBpZiAoREZHOjps
b2dDb21waWxhdGlvbkNoYW5nZXMobV9tb2RlKSB8fCBPcHRpb25zOjpsb2dQaGFzZVRpbWVzKCkp
CisgICAgICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAi
IHdpdGggIiwgbV9tb2RlLCAiLCBpbnN0cnVjdGlvbnMgc2l6ZSA9ICIsIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnNTaXplKCksICJcbiIpOworCisgICAgQ29tcGlsYXRpb25QYXRoIHBhdGggPSBj
b21waWxlSW5UaHJlYWRJbXBsKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCgocGF0aCA9PSBDYW5j
ZWxQYXRoKSA9PSAobV9zdGFnZSA9PSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKSk7CisKKyAgICBN
b25vdG9uaWNUaW1lIGFmdGVyOworICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGlsZVRpbWVz
KCkpKSB7CisgICAgICAgIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0ZUTCgpKSB7CisgICAgICAgICAgICAgICAgdG90YWxGVExDb21waWxlVGltZSArPSBhZnRl
ciAtIGJlZm9yZTsKKyAgICAgICAgICAgICAgICB0b3RhbEZUTERGR0NvbXBpbGVUaW1lICs9IG1f
dGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKKyAgICAgICAgICAgICAgICB0b3RhbEZUTEIzQ29tcGls
ZVRpbWUgKz0gYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEw7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1vZGUoKSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKQorICAgICAgICAgICAgICAg
IHRvdGFsQmFzZWxpbmVDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0b3RhbERGR0NvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVm
b3JlOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHBhdGhOYW1lID0gbnVsbHB0
cjsKKyAgICBzd2l0Y2ggKHBhdGgpIHsKKyAgICBjYXNlIEZhaWxQYXRoOgorICAgICAgICBwYXRo
TmFtZSA9ICJOL0EgKGZhaWwpIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCYXNlbGluZVBh
dGg6CisgICAgICAgIHBhdGhOYW1lID0gIkJhc2VsaW5lIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBERkdQYXRoOgorICAgICAgICBwYXRoTmFtZSA9ICJERkciOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZUTFBhdGg6CisgICAgICAgIHBhdGhOYW1lID0gIkZUTCI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ2FuY2VsUGF0aDoKKyAgICAgICAgcGF0aE5hbWUgPSAiQ2FuY2VsZWQi
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKG1fY29kZUJsb2Nr
KSB7IC8vIG1fY29kZUJsb2NrIHdpbGwgYmUgbnVsbCBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGNh
bmNlbGxlZC4KKyAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKKyAgICAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJmdGxDb21waWxlIiwgKCJ0b29rICIsIChhZnRl
ciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERGRzogIiwgKG1fdGltZUJlZm9yZUZU
TCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIgLSBtX3RpbWVCZWZv
cmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBhdGhOYW1lKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZmdDb21w
aWxlIiwgKCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgd2l0
aCAiLCBwYXRoTmFtZSkpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkocmVwb3J0Q29tcGlsZVRp
bWVzKCkpKSB7CisgICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxvY2tOYW1lLCAi
IHVzaW5nICIsIG1fbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGludG8gIiwgY29kZVNpemUo
KSwgIiBieXRlcyBpbiAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIik7
CisgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCisgICAgICAgICAgICBkYXRhTG9nKCIgKERG
RzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAi
LCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSIpOworICAgICAg
ICBkYXRhTG9nKCIuXG4iKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlhOGRmNGE3NDk2MGI5ZGQwODdiZjM3YjUzMWIwMjRmYTFhMTNiNDUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uaApAQCAtMCwwICsx
LDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVz
dWx0LmgiCisjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25LZXkuaCIKKyNpbmNsdWRlICJKSVRDb21w
aWxhdGlvbk1vZGUuaCIKKyNpbmNsdWRlICJKSVRQbGFuU3RhZ2UuaCIKKyNpbmNsdWRlICJSZWxl
YXNlSGVhcEFjY2Vzc1Njb3BlLmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3I7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVRX
b3JrbGlzdFRocmVhZDsKK2NsYXNzIFZNOworCitjbGFzcyBKSVRQbGFuIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEpJVFBsYW4+IHsKK3Byb3RlY3RlZDoKKyAgICBKSVRQbGFuKEpJVENv
bXBpbGF0aW9uTW9kZSwgQ29kZUJsb2NrKik7CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5KSVRQ
bGFuKCkgeyB9CisKKyAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIEpJ
VFdvcmtsaXN0VGhyZWFkKiB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZDsgfQorCisg
ICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKwor
ICAgIEpJVFBsYW5TdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhZ2U7IH0KKyAgICBi
b29sIGlzRlRMKCkgY29uc3QgeyByZXR1cm4gOjpKU0M6OmlzRlRMKG1fbW9kZSk7IH0KKworICAg
IGVudW0gY2xhc3MgVGllciB7IEJhc2VsaW5lID0gMCwgREZHID0gMSwgRlRMID0gMiwgQ291bnQg
PSAzIH07CisgICAgVGllciB0aWVyKCkgY29uc3Q7CisKKyAgICBKSVRDb21waWxhdGlvbktleSBr
ZXkoKTsKKworICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKEpJVFdvcmtsaXN0VGhyZWFkKik7CisK
KyAgICB2aXJ0dWFsIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Q29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemVJbkdDKCkgeyB9CisKKyAgICB2b2lkIG5vdGlmeUNvbXBpbGluZygpOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlSZWFkeSgpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0tub3duVG9CZUxpdmVBZnRlckdDKCk7CisgICAgdmlydHVhbCBib29s
IGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKEFic3RyYWN0U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJiwgY29u
c3QgRnVuY3Rpb248dm9pZChDb2RlQmxvY2sqKT4mKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOworCitwcm90ZWN0
ZWQ6CisgICAgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCkgY29uc3Q7CisgICAgYm9vbCByZXBv
cnRDb21waWxlVGltZXMoKSBjb25zdDsKKworICAgIGVudW0gQ29tcGlsYXRpb25QYXRoIHsgRmFp
bFBhdGgsIEJhc2VsaW5lUGF0aCwgREZHUGF0aCwgRlRMUGF0aCwgQ2FuY2VsUGF0aCB9OworICAg
IHZpcnR1YWwgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRocmVhZEltcGwoKSA9IDA7CisKKyAg
ICBKSVRQbGFuU3RhZ2UgbV9zdGFnZSB7IEpJVFBsYW5TdGFnZTo6UHJlcGFyaW5nIH07CisgICAg
SklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fdGltZUJlZm9y
ZUZUTDsKKyAgICBWTSogbV92bTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEpJ
VFdvcmtsaXN0VGhyZWFkKiBtX3RocmVhZCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhblN0YWdlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFBsYW5TdGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YjJmZjRlZjJjYWJhNzgyMDdlNTc2YmViZjNi
OTczMzZkYTY4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFBsYW5TdGFnZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mgewor
CitlbnVtIGNsYXNzIEpJVFBsYW5TdGFnZSB7CisgICAgUHJlcGFyaW5nLAorICAgIENvbXBpbGlu
ZywKKyAgICBSZWFkeSwKKyAgICBDYW5jZWxlZCwKK307CisKKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNhZmVwb2ludC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNhZmVwb2ludC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODdkOTg1OTY4YThkMjZkZjJmNDAzZDg3MjQ1NDRhMmQwMzk1NmM1ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2FmZXBvaW50LmNwcApAQCAtMCwwICsx
LDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRTYWZlcG9pbnQuaCIKKworI2lm
IEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRQbGFuLmgiCisjaW5jbHVkZSAiSklUU2Nhbm5h
YmxlLmgiCisjaW5jbHVkZSAiSklUV29ya2xpc3RUaHJlYWQuaCIKKyNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2FmZXBvaW50OjpSZXN1bHQ6On5SZXN1bHQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fd2FzQ2hlY2tlZCk7Cit9CisKK2Jvb2wgU2FmZXBv
aW50OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxlZCgpCit7CisgICAgbV93YXNDaGVja2VkID0gdHJ1
ZTsKKyAgICByZXR1cm4gbV9kaWRHZXRDYW5jZWxsZWQ7Cit9CisKK1NhZmVwb2ludDo6U2FmZXBv
aW50KEpJVFBsYW4mIHBsYW4sIFJlc3VsdCYgcmVzdWx0KQorICAgIDogbV92bShwbGFuLnZtKCkp
CisgICAgLCBtX3BsYW4ocGxhbikKKyAgICAsIG1fZGlkQ2FsbEJlZ2luKGZhbHNlKQorICAgICwg
bV9yZXN1bHQocmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5tX3dhc0NoZWNr
ZWQpOworICAgIHJlc3VsdC5tX3dhc0NoZWNrZWQgPSBmYWxzZTsKKyAgICByZXN1bHQubV9kaWRH
ZXRDYW5jZWxsZWQgPSBmYWxzZTsKK30KKworU2FmZXBvaW50Ojp+U2FmZXBvaW50KCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgaWYgKEpJVFdvcmtsaXN0VGhy
ZWFkKiB0aHJlYWQgPSBtX3BsYW4udGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dGhyZWFkLT5tX3NhZmVwb2ludCA9PSB0aGlzKTsKKyAgICAgICAgdGhyZWFkLT5tX3JpZ2h0VG9S
dW4ubG9jaygpOworICAgICAgICB0aHJlYWQtPm1fc2FmZXBvaW50ID0gbnVsbHB0cjsKKyAgICB9
Cit9CisKK3ZvaWQgU2FmZXBvaW50OjphZGQoU2Nhbm5hYmxlKiBzY2FubmFibGUpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKKyAgICBtX3NjYW5uYWJsZXMuYXBwZW5k
KHNjYW5uYWJsZSk7Cit9CisKK3ZvaWQgU2FmZXBvaW50OjpiZWdpbigpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoIW1fZGlkQ2FsbEJlZ2luKTsKKyAgICBtX2RpZENhbGxCZWdpbiA9IHRydWU7Cisg
ICAgaWYgKEpJVFdvcmtsaXN0VGhyZWFkKiBkYXRhID0gbV9wbGFuLnRocmVhZCgpKSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5tX3NhZmVwb2ludCk7CisgICAgICAgIGRhdGEtPm1f
c2FmZXBvaW50ID0gdGhpczsKKyAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLnVubG9ja0ZhaXJs
eSgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgU2FmZXBv
aW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKworICAgIGlmIChtX3Jlc3VsdC5t
X2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSB3ZXJlIGNhbmNlbGxlZCBk
dXJpbmcgYSBwcmV2aW91cyBHQyEKKyAgICAKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKHZpc2l0b3IpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9zY2FubmFibGVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9zY2FubmFibGVzW2ldLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZSB2b2lkIFNhZmVwb2ludDo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oQWJzdHJhY3RTbG90VmlzaXRvciYpOwordGVtcGxh
dGUgdm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Citib29sIFNhZmVwb2ludDo6aXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2Fu
Y2VsbGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5n
IGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFyb3Vu
ZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgorICAgIAorICAgIHJldHVybiBtX3Bs
YW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0ModmlzaXRvcik7Cit9CisKK3RlbXBsYXRlIGJvb2wg
U2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVEdXJpbmdHQyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7
Cit0ZW1wbGF0ZSBib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoU2xvdFZp
c2l0b3ImKTsKKworYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBpZiAobV9yZXN1
bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJlIGNh
bmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB0
aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCisgICAgCisg
ICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCk7Cit9CisKK3ZvaWQgU2Fm
ZXBvaW50OjpjYW5jZWwoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpOyAvLyBXZSBj
YW5ub3QgZ2V0IGNhbmNlbGxlZCB0d2ljZSBiZWNhdXNlIHN1YnNlcXVlbnQgR0NzIHdpbGwgdGhp
bmsgdGhhdCB3ZSdyZSBhbGl2ZSBhbmQgdGhleSB3aWxsIG5vdCBkbyBhbnl0aGluZyB0byB1cy4K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4uc3RhZ2UoKSA9PSBKSVRQbGFuU3RhZ2U6
OkNhbmNlbGVkKTsKKyAgICBtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IHRydWU7CisgICAg
bV92bSA9IG51bGxwdHI7Cit9CisKK1ZNKiBTYWZlcG9pbnQ6OnZtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92bTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNhZmVwb2lu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTYWZlcG9pbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMzEzMDk3MGI4MDY3MTBiMWQ5ZGVjODJlMmFmNDIxMDFlY2Q1OTUzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTYWZlcG9pbnQuaApAQCAtMCwwICsx
LDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUUGxhbjsKK2NsYXNzIFNjYW5uYWJs
ZTsKK2NsYXNzIFZNOworCitjbGFzcyBTYWZlcG9pbnQgeworcHVibGljOgorICAgIGNsYXNzIFJl
c3VsdCB7CisgICAgcHVibGljOgorICAgICAgICBSZXN1bHQoKQorICAgICAgICAgICAgOiBtX2Rp
ZEdldENhbmNlbGxlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV93YXNDaGVja2VkKHRydWUpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgflJlc3VsdCgpOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBkaWRHZXRDYW5jZWxsZWQoKTsKKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNhZmVwb2ludDsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgbV9kaWRHZXRDYW5jZWxsZWQ7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2VkOworICAgIH07
CisgICAgCisgICAgU2FmZXBvaW50KEpJVFBsYW4mLCBSZXN1bHQmKTsKKyAgICB+U2FmZXBvaW50
KCk7CisgICAgCisgICAgdm9pZCBhZGQoU2Nhbm5hYmxlKik7CisgICAgCisgICAgdm9pZCBiZWdp
bigpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbihWaXNpdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4gYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQyhWaXNpdG9yJik7CisgICAgYm9vbCBpc0tu
b3duVG9CZUxpdmVBZnRlckdDKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKKyAgICAKKyAgICBWTSog
dm0oKSBjb25zdDsgLy8gTWF5IHJldHVybiBudWxsIGlmIHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLgor
Citwcml2YXRlOgorICAgIFZNKiBtX3ZtOworICAgIEpJVFBsYW4mIG1fcGxhbjsKKyAgICBWZWN0
b3I8U2Nhbm5hYmxlKj4gbV9zY2FubmFibGVzOworICAgIGJvb2wgbV9kaWRDYWxsQmVnaW47Cisg
ICAgUmVzdWx0JiBtX3Jlc3VsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U2Nhbm5hYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNjYW5uYWJsZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE1NjZkOTNlZjFjMzI5MTk4MmI1YjRjYTc4ZDE0MjlmNzlkYTZiZWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNjYW5uYWJsZS5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworY2xhc3MgU2xvdFZpc2l0b3I7CisK
K2NsYXNzIFNjYW5uYWJsZSB7CitwdWJsaWM6CisgICAgU2Nhbm5hYmxlKCkgeyB9CisgICAgdmly
dHVhbCB+U2Nhbm5hYmxlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihB
YnN0cmFjdFNsb3RWaXNpdG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5j
cHAKaW5kZXggYTk2ODk3NGJkNmE5ODIzYjkwYWFkYzQ0YTQxNGE1MzdhOTAzY2Y3YS4uOTc4YmRk
NDFiZmJjOGMyNDAyYzBiODFhYTk2OGVjZWZmZmNlODcyYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwyOTYgKzI4LDMyNCBAQAogCiAjaWYgRU5B
QkxFKEpJVCkKIAotI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVFNhZmVwb2ludC5oIgor
I2luY2x1ZGUgIkpJVFdvcmtsaXN0VGhyZWFkLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
ICNpbmNsdWRlICJWTUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpJVFdvcmtsaXN0OjpQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpJVFdvcmtsaXN0OjpQbGFuPiB7Ci1wdWJsaWM6Ci0gICAg
UGxhbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQotICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBt
X2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJblRocmVhZCgpCi0gICAgewot
ICAgICAgICBtX2ppdC5jb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7Ci0gICAgICAgIAotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07
Ci0gICAgICAgIG1faXNGaW5pc2hlZENvbXBpbGluZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgZmluYWxpemUoYm9vbCBuZWVkc0ZlbmNlKQotICAgIHsKLSAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKLSAgICAgICAg
c3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLiIpOwotICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPm1fZGlkRmFpbEpJVENvbXBpbGF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgICAgICBp
ZiAobmVlZHNGZW5jZSkKLSAgICAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZl
bmNlKCk7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIg
ICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuIik7Ci0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKG1fY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5qaXRTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBWTSYgdm0oKSB7IHJldHVy
biBtX2NvZGVCbG9jay0+dm0oKTsgfQotICAgIAotICAgIGJvb2wgaXNGaW5pc2hlZENvbXBpbGlu
ZygpCi0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07Ci0gICAgICAgIHJl
dHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lk
IGNvbXBpbGVPbk1haW5UaHJlYWROb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBwbGFuLmNvbXBp
bGVJblRocmVhZCgpOwotICAgICAgICBwbGFuLmZpbmFsaXplKGZhbHNlKTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgSklUIG1faml0Owot
ICAgIExvY2sgbV9sb2NrOwotICAgIGJvb2wgbV9pc0ZpbmlzaGVkQ29tcGlsaW5nIHsgZmFsc2Ug
fTsKLX07Ci0KLWNsYXNzIEpJVFdvcmtsaXN0OjpUaHJlYWQgZmluYWwgOiBwdWJsaWMgQXV0b21h
dGljVGhyZWFkIHsKLXB1YmxpYzoKLSAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgSklUV29ya2xpc3QmIHdvcmtsaXN0KQotICAgICAgICA6IEF1dG9tYXRpY1RocmVhZChs
b2NrZXIsIHdvcmtsaXN0Lm1fbG9jaywgd29ya2xpc3QubV9jb25kaXRpb24uY29weVJlZigpKQot
ICAgICAgICAsIG1fd29ya2xpc3Qod29ya2xpc3QpCi0gICAgewotICAgICAgICBtX3dvcmtsaXN0
Lm1fbnVtQXZhaWxhYmxlVGhyZWFkcysrOwotICAgIH0KK0pJVFdvcmtsaXN0OjpKSVRXb3JrbGlz
dCgpCisgICAgOiBtX2xvY2soQm94PFVuY2hlY2tlZExvY2s+OjpjcmVhdGUoKSkKKyAgICAsIG1f
cGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCit7CisgICAg
bV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGllciA9IHsKKyAgICAg
ICAgT3B0aW9uczo6bnVtYmVyT2ZXb3JrbGlzdFRocmVhZHMoKSwKKyAgICAgICAgT3B0aW9uczo6
bnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKSwKKyAgICAgICAgT3B0aW9uczo6bnVtYmVyT2ZG
VExDb21waWxlclRocmVhZHMoKSwKKyAgICB9OwogCi0gICAgY29uc3QgY2hhciogbmFtZSgpIGNv
bnN0IGZpbmFsCi0gICAgewotI2lmIE9TKExJTlVYKQotICAgICAgICByZXR1cm4gIkpJVFdvcmtl
ciI7Ci0jZWxzZQotICAgICAgICByZXR1cm4gIkpJVCBXb3JrbGlzdCBIZWxwZXIgVGhyZWFkIjsK
LSNlbmRpZgotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikgZmluYWwKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
d29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzKTsKLSAgICAgICAgCi0gICAgICAgIGlmICht
X3dvcmtsaXN0Lm1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1
bHQ6OldhaXQ7Ci0gICAgICAgIAotICAgICAgICBtX215UGxhbnMgPSBXVEZNb3ZlKG1fd29ya2xp
c3QubV9xdWV1ZSk7Ci0gICAgICAgIG1fd29ya2xpc3QubV9udW1BdmFpbGFibGVUaHJlYWRzLS07
Ci0gICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwotICAgIH0KLSAgICAKLSAgICBXb3Jr
UmVzdWx0IHdvcmsoKSBmaW5hbAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbXlQ
bGFucy5pc0VtcHR5KCkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChSZWZQdHI8UGxhbj4mIHBs
YW4gOiBtX215UGxhbnMpIHsKLSAgICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZCgpOwot
ICAgICAgICAgICAgcGxhbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHRocmVhZCByZWFsaXplcyB0aGF0IHdlIGp1c3QgY29t
cGlsZWQgc29tZXRoaW5nLiBOb3RpZnlpbmcKLSAgICAgICAgICAgIC8vIGEgY29uZGl0aW9uIGlz
IGJhc2ljYWxseSBmcmVlIGlmIG5vYm9keSBpcyB3YWl0aW5nLgotICAgICAgICAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICAgICAgbV93b3JrbGlzdC5t
X2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIG1fbXlQbGFucy5jbGVhcigpOwotICAgICAgICAKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7
ICptX3dvcmtsaXN0Lm1fbG9jayB9OwotICAgICAgICBtX3dvcmtsaXN0Lm1fbnVtQXZhaWxhYmxl
VGhyZWFkcysrOwotICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Ci0gICAgfQor
ICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IE9wdGlvbnM6Om51bWJlck9mV29ya2xpc3RUaHJlYWRzKCk7ICsraSkKKyAgICAgICAgbV90
aHJlYWRzLmFwcGVuZChuZXcgSklUV29ya2xpc3RUaHJlYWQobG9ja2VyLCAqdGhpcykpOworfQog
Ci0gICAgdm9pZCB0aHJlYWREaWRTdGFydCgpIGZpbmFsCi0gICAgewotICAgICAgICBtX2NvbXBp
bGF0aW9uU2NvcGUgPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CitKSVRXb3JrbGlz
dDo6fkpJVFdvcmtsaXN0KCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30K
Kworc3RhdGljIEpJVFdvcmtsaXN0KiB0aGVHbG9iYWxKSVRXb3JrbGlzdCB7IG51bGxwdHIgfTsK
KworSklUV29ya2xpc3QqIEpJVFdvcmtsaXN0OjpleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxs
KCkKK3sKKyAgICByZXR1cm4gdGhlR2xvYmFsSklUV29ya2xpc3Q7Cit9CisKK0pJVFdvcmtsaXN0
JiBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKQoreworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAg
ICAgICBbXSB7CisgICAgICAgICAgICBhdXRvKiB3b3JrbGlzdCA9IG5ldyBKSVRXb3JrbGlzdCgp
OworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIHRoZUds
b2JhbEpJVFdvcmtsaXN0ID0gd29ya2xpc3Q7CisgICAgICAgIH0pOworICAgIHJldHVybiAqdGhl
R2xvYmFsSklUV29ya2xpc3Q7Cit9CisKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVFdvcmtsaXN0Ojpl
bnF1ZXVlKFJlZjxKSVRQbGFuPiBwbGFuKQoreworICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpJVCgpKSB7CisgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChudWxscHRyKTsKKyAg
ICAgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKCk7CiAgICAgfQotICAgIAotICAgIHZvaWQgdGhy
ZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpIGZpbmFsCi0gICAgewotICAgICAg
ICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBudWxscHRyOworCisgICAgTG9ja2VyIGxvY2tlciB7ICpt
X2xvY2sgfTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgewor
ICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygi
OiBFbnF1ZXVlaW5nIHBsYW4gdG8gb3B0aW1pemUgIiwgcGxhbi0+a2V5KCksICJcbiIpOwogICAg
IH0KKyAgICBBU1NFUlQobV9wbGFucy5maW5kKHBsYW4tPmtleSgpKSA9PSBtX3BsYW5zLmVuZCgp
KTsKKyAgICBtX3BsYW5zLmFkZChwbGFuLT5rZXkoKSwgcGxhbi5jb3B5UmVmKCkpOworICAgIG1f
cXVldWVzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihwbGFuLT50aWVyKCkpXS5hcHBlbmQoV1RGTW92
ZShwbGFuKSk7CisgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOworICAgIHJl
dHVybiBDb21waWxhdGlvbkRlZmVycmVkOworfQogCi0gICAgSklUV29ya2xpc3QmIG1fd29ya2xp
c3Q7Ci0gICAgUGxhbnMgbV9teVBsYW5zOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlv
blNjb3BlPiBtX2NvbXBpbGF0aW9uU2NvcGU7Ci19Oworc2l6ZV90IEpJVFdvcmtsaXN0OjpxdWV1
ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAgICBy
ZXR1cm4gcXVldWVMZW5ndGgobG9ja2VyKTsKK30KIAotSklUV29ya2xpc3Q6OkpJVFdvcmtsaXN0
KCkKLSAgICA6IG1fbG9jayhCb3g8VW5jaGVja2VkTG9jaz46OmNyZWF0ZSgpKQotICAgICwgbV9j
b25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKK3NpemVfdCBKSVRX
b3JrbGlzdDo6cXVldWVMZW5ndGgoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdAoreworICAg
IHNpemVfdCBxdWV1ZUxlbmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpDb3VudCk7ICsraSkKKyAgICAgICAg
cXVldWVMZW5ndGggKz0gbV9xdWV1ZXNbaV0uc2l6ZSgpOworICAgIHJldHVybiBxdWV1ZUxlbmd0
aDsKK30KKwordm9pZCBKSVRXb3JrbGlzdDo6c3VzcGVuZEFsbFRocmVhZHMoKQoreworICAgIG1f
c3VzcGVuc2lvbkxvY2subG9jaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5z
aXplKCk7IGktLTspCisgICAgICAgIG1fdGhyZWFkc1tpXS0+bV9yaWdodFRvUnVuLmxvY2soKTsK
K30KKwordm9pZCBKSVRXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV90aHJlYWRzW2ld
LT5tX3JpZ2h0VG9SdW4udW5sb2NrKCk7CisgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsK
K30KKworYXV0byBKSVRXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZShKSVRDb21waWxhdGlvbktl
eSBrZXkpIC0+IFN0YXRlCiB7CiAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBt
X3RocmVhZCA9IG5ldyBUaHJlYWQobG9ja2VyLCAqdGhpcyk7CisgICAgY29uc3QgYXV0byYgaXRl
ciA9IG1fcGxhbnMuZmluZChrZXkpOworICAgIGlmIChpdGVyID09IG1fcGxhbnMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBOb3RLbm93bjsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUtPnN0YWdlKCkg
PT0gSklUUGxhblN0YWdlOjpSZWFkeSA/IENvbXBpbGVkIDogQ29tcGlsaW5nOwogfQogCi1KSVRX
b3JrbGlzdDo6fkpJVFdvcmtsaXN0KCkKK2F1dG8gSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVh
ZHlQbGFuc0ZvclZNKFZNJiB2bSwgSklUQ29tcGlsYXRpb25LZXkgcmVxdWVzdGVkS2V5KSAtPiBT
dGF0ZQogewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8SklUUGxhbj4sIDg+IG15UmVhZHlQ
bGFuczsKKyAgICByZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIG15UmVhZHlQbGFucyk7CisK
KyAgICBTdGF0ZSByZXN1bHRpbmdTdGF0ZSA9IE5vdEtub3duOworICAgIHdoaWxlICghbXlSZWFk
eVBsYW5zLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8SklUUGxhbj4gcGxhbiA9IG15UmVh
ZHlQbGFucy50YWtlTGFzdCgpOworICAgICAgICBKSVRDb21waWxhdGlvbktleSBjdXJyZW50S2V5
ID0gcGxhbi0+a2V5KCk7CisKKyAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZUNv
bXBpbGF0aW9uUXVldWUoKSwgKnRoaXMsICI6IENvbXBsZXRpbmcgIiwgY3VycmVudEtleSk7CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFuU3RhZ2U6OlJl
YWR5KTsKKworICAgICAgICBwbGFuLT5maW5hbGl6ZSgpOworCisgICAgICAgIGlmIChjdXJyZW50
S2V5ID09IHJlcXVlc3RlZEtleSkKKyAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29tcGls
ZWQ7CisgICAgfQorCisgICAgaWYgKCEhcmVxdWVzdGVkS2V5ICYmIHJlc3VsdGluZ1N0YXRlID09
IE5vdEtub3duKSB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgICAg
IGlmIChtX3BsYW5zLmNvbnRhaW5zKHJlcXVlc3RlZEtleSkpCisgICAgICAgICAgICByZXN1bHRp
bmdTdGF0ZSA9IENvbXBpbGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0aW5nU3RhdGU7
CiB9CiAKLWJvb2wgSklUV29ya2xpc3Q6OmNvbXBsZXRlQWxsRm9yVk0oVk0mIHZtKQorCit2b2lk
IEpJVFdvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mIHZtKQogewot
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
CisgICAgLy8gV2hpbGUgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBjb21waWxlciB0byBmaW5pc2gs
IHRoZSBjb2xsZWN0b3IgbWlnaHQgaGF2ZSBhbHJlYWR5IHN1c3BlbmRlZAorICAgIC8vIHRoZSBj
b21waWxlciBhbmQgdGhlbiBpdCB3aWxsIGJlIHdhaXRpbmcgZm9yIHVzIHRvIHN0b3AuIFRoYXQn
cyBhIGRlYWRsb2NrLiBXZSBhdm9pZCB0aGF0CisgICAgLy8gZGVhZGxvY2sgYnkgcmVsaW5xdWlz
aGluZyBvdXIgaGVhcCBhY2Nlc3MsIHNvIHRoYXQgdGhlIGNvbGxlY3RvciBwcmV0ZW5kcyB0aGF0
IHdlIGFyZSBzdG9wcGVkCisgICAgLy8gZXZlbiBpZiB3ZSBhcmVuJ3QuCisgICAgUmVsZWFzZUhl
YXBBY2Nlc3NTY29wZSByZWxlYXNlSGVhcEFjY2Vzc1Njb3BlKHZtLmhlYXApOworCisgICAgLy8g
V2FpdCBmb3IgYWxsIG9mIHRoZSBwbGFucyBmb3IgdGhlIGdpdmVuIFZNIHRvIGNvbXBsZXRlLiBU
aGUgaWRlYSBoZXJlCisgICAgLy8gaXMgdGhhdCB3ZSB3YW50IGFsbCBvZiB0aGUgY2FsbGVyIFZN
J3MgcGxhbnMgdG8gYmUgZG9uZS4gV2UgZG9uJ3QgY2FyZQorICAgIC8vIGFib3V0IGFueSBvdGhl
ciBWTSdzIHBsYW5zLCBhbmQgd2Ugd29uJ3QgYXR0ZW1wdCB0byB3YWl0IG9uIHRob3NlLgorICAg
IC8vIEFmdGVyIHdlIHJlbGVhc2UgdGhpcyBsb2NrLCB3ZSBrbm93IHRoYXQgYWx0aG91Z2ggb3Ro
ZXIgVk1zIG1heSBzdGlsbAorICAgIC8vIGJlIGFkZGluZyBwbGFucywgb3VyIFZNIHdpbGwgbm90
IGJlLgorICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpk
YXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiOiBXYWl0aW5nIGZvciBhbGwgaW4gVk0gdG8g
Y29tcGxldGUuXG4iKTsKKyAgICB9CisKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFZlY3RvcjxS
ZWZQdHI8UGxhbj4sIDMyPiBteVBsYW5zOwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg
ICAgIGJvb2wgZGlkRmluZFVuZmluaXNoZWRQbGFuID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
bV9wbGFucy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChSZWZQ
dHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmcGxhbi0+dm0o
KSAhPSAmdm0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRGaW5kVW5maW5pc2hlZFBsYW4gPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG15UGxhbnMuYXBwZW5kKFdU
Rk1vdmUocGxhbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IElmIHdlIGZvdW5kIHBsYW5zIHRoZW4gd2Ugc2hvdWxkIGZpbmFsaXplIHRoZW0gbm93LgotICAg
ICAgICAgICAgICAgIGlmICghbXlQbGFucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0
IGZpbmQgcGxhbnMsIHRoZW4gd2UncmUgZWl0aGVyIGRvbmUgb3Igd2UgbmVlZCB0byB3YWl0LCBk
ZXBlbmRpbmcgb24KLSAgICAgICAgICAgICAgICAvLyB3aGV0aGVyIHdlIGZvdW5kIHNvbWUgdW5m
aW5pc2hlZCBwbGFucy4KLSAgICAgICAgICAgICAgICBpZiAoIWRpZEZpbmRVbmZpbmlzaGVkUGxh
bikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+d2FpdCgqbV9sb2NrKTsKKyAgICAgICAgYm9v
bCBhbGxBcmVDb21waWxlZCA9IHRydWU7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkg
OiBtX3BsYW5zKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUtPnZtKCkgIT0gJnZtKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5z
dGFnZSgpICE9IEpJVFBsYW5TdGFnZTo6UmVhZHkpIHsKKyAgICAgICAgICAgICAgICBhbGxBcmVD
b21waWxlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbXlQbGFucy5pc0Vt
cHR5KCkpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgICAgICBmaW5hbGl6ZVBsYW5zKG15
UGxhbnMpOworCisgICAgICAgIGlmIChhbGxBcmVDb21waWxlZCkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIG1fcGxhbkNvbXBpbGVkLndhaXQoKm1fbG9jayk7CiAgICAgfQogfQogCi12
b2lkIEpJVFdvcmtsaXN0Ojpwb2xsKFZNJiB2bSkKK3ZvaWQgSklUV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIFBsYW5zIG15UGxhbnM7Ci0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgKm1fbG9j
ayB9OwotICAgICAgICBtX3BsYW5zLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICAgICAgWyZd
IChSZWZQdHI8UGxhbj4mIHBsYW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoJnBsYW4tPnZtKCkg
IT0gJnZtKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwbGFuLT5pc0ZpbmlzaGVkQ29tcGlsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBteVBsYW5zLmFwcGVuZChXVEZNb3ZlKHBs
YW4pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pOwotICAg
IH0KLSAgICAKLSAgICBmaW5hbGl6ZVBsYW5zKG15UGxhbnMpOworICAgIHdhaXRVbnRpbEFsbFBs
YW5zRm9yVk1BcmVSZWFkeSh2bSk7CisgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0p
OwogfQogCi12b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKK3ZvaWQgSklUV29y
a2xpc3Q6OmNhbmNlbEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogewotICAgIERlZmVyR0MgZGVmZXJH
Qyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgCi0gICAgaWYgKGNv
ZGVCbG9jay0+bV9kaWRGYWlsSklUQ29tcGlsYXRpb24pIHsKLSAgICAgICAgY29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkgewotICAgICAgICBQbGFuOjpjb21waWxl
T25NYWluVGhyZWFkTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICByZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0odm0sIFsmXShKSVRQ
bGFuJiBwbGFuKSB7CisgICAgICAgIHJldHVybiBwbGFuLnN0YWdlKCkgIT0gSklUUGxhblN0YWdl
OjpDb21waWxpbmc7CisgICAgfSk7CisKKyAgICB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVh
ZHkodm0pOworCisgICAgVmVjdG9yPFJlZlB0cjxKSVRQbGFuPiwgOD4gbXlSZWFkeVBsYW5zOwor
ICAgIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgbXlSZWFkeVBsYW5zKTsKK30KKwordm9p
ZCBKSVRXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2bSkKK3sKKyAgICByZW1vdmVNYXRj
aGluZ1BsYW5zRm9yVk0odm0sIFsmXShKSVRQbGFuJiBwbGFuKSB7CisgICAgICAgIGlmICghcGxh
bi5pc0tub3duVG9CZUxpdmVBZnRlckdDKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcGxhbi5maW5hbGl6ZUluR0MoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0p
OworCisgICAgLy8gTm8gbG9ja2luZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2VlIGNvbW1lbnQg
aW4gdmlzaXRXZWFrUmVmZXJlbmNlcygpLgorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFk
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQgPSBtX3RocmVh
ZHNbaV0uZ2V0KCktPm1fc2FmZXBvaW50OworICAgICAgICBpZiAoIXNhZmVwb2ludCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxp
dmVBZnRlckdDKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2FmZXBvaW50LT5j
YW5jZWwoKTsKICAgICB9Ci0gICAgCi0gICAgY29kZUJsb2NrLT5qaXRTb29uKCk7Cit9CiAKK3Vu
c2lnbmVkIEpJVFdvcmtsaXN0OjpzZXRNYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50REZHQ29tcGls
YXRpb25zKHVuc2lnbmVkIG4pCit7CisgICAgdW5zaWduZWQgb2xkVmFsdWUgPSBtX21heGltdW1O
dW1iZXJPZkNvbmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihKSVRQbGFuOjpUaWVyOjpERkcpXTsKKyAgICBtX21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRD
b21waWxhdGlvbnNQZXJUaWVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpE
RkcpXSA9IG47CisgICAgcmV0dXJuIG9sZFZhbHVlOworfQorCit1bnNpZ25lZCBKSVRXb3JrbGlz
dDo6c2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudEZUTENvbXBpbGF0aW9ucyh1bnNpZ25lZCBu
KQoreworICAgIHVuc2lnbmVkIG9sZFZhbHVlID0gbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50
Q29tcGlsYXRpb25zUGVyVGllcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxhbjo6VGllcjo6
RlRMKV07CisgICAgbV9tYXhpbXVtTnVtYmVyT2ZDb25jdXJyZW50Q29tcGlsYXRpb25zUGVyVGll
cltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSklUUGxhbjo6VGllcjo6RlRMKV0gPSBuOworICAgIHJl
dHVybiBvbGRWYWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSklU
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBW
TSogdm0gPSAmdmlzaXRvci5oZWFwKCktPnZtKCk7CiAgICAgewogICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgKm1fbG9jayB9OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fcGxhbm5lZC5jb250YWlu
cyhjb2RlQmxvY2spKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYg
KG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewotICAgICAgICAgICAgbV9wbGFubmVkLmFkZChjb2Rl
QmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxh
bihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgIG1f
cGxhbnMuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgbV9xdWV1ZS5hcHBlbmQocGxhbik7Ci0g
ICAgICAgICAgICBtX2NvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CisgICAgICAgICAg
ICBpZiAoZW50cnkudmFsdWUtPnZtKCkgIT0gdm0pCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBlbnRyeS52YWx1ZS0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBDb21waWxpbmcgb24gdGhlIG1h
aW4gdGhyZWFkIGlmIHRoZSBoZWxwZXIgdGhyZWFkIGlzbid0IGF2YWlsYWJsZSBpcyBhIGRlZmVu
c2UgYWdhaW5zdCB0aGlzCi0gICAgLy8gcGF0aG9sb2d5OgotICAgIC8vCi0gICAgLy8gMSkgRG8g
c29tZXRoaW5nIHRoYXQgaXMgYWxsb3dlZCB0byB0YWtlIGEgd2hpbGUsIGxpa2UgbG9hZCBhIGdp
YW50IHBpZWNlIG9mIGluaXRpYWxpemF0aW9uCi0gICAgLy8gICAgY29kZS4gVGhpcyBwbGFucyB0
aGUgY29tcGlsZSBvZiB0aGUgaW5pdCBjb2RlLCBidXQgZG9lc24ndCBmaW5pc2ggaXQuIEl0IHdp
bGwgdGFrZSBhCi0gICAgLy8gICAgd2hpbGUuCi0gICAgLy8KLSAgICAvLyAyKSBEbyBzb21ldGhp
bmcgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBxdWljay4gTm93IGFsbCBiYXNlbGluZSBjb21waWxl
cywgYW5kIHNvIGFsbCBERkcgYW5kCi0gICAgLy8gICAgRlRMIGNvbXBpbGVzLCBvZiBldmVyeXRo
aW5nIGlzIGJsb2NrZWQgb24gdGhlIGxvbmctcnVubmluZyBiYXNlbGluZSBjb21waWxlIG9mIHRo
YXQKLSAgICAvLyAgICBpbml0aWFsaXphdGlvbiBjb2RlLgotICAgIC8vCi0gICAgLy8gVGhlIHNp
bmdsZS10aHJlYWRlZCBjb25jdXJyZW50IEpJVCBoYXMgdGhpcyB0ZW5kZW5jeSB0byBjb252b3kg
ZXZlcnl0aGluZyB3aGlsZSBhdCB0aGUgc2FtZQotICAgIC8vIHRpbWUgcG9zdHBvbmluZyB3aGVu
IGl0IGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbnZveSBkZWxheXMgYXJlIGxlc3Mg
cHJlZGljdGFibGUuCi0gICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUg
Y29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgotICAg
IC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3
ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCi0gICAgLy8gY2FuIGRvIHRoYXQg
c29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlT25NYWluVGhyZWFkTm93KGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgLy8gVGhpcyBsb29wIGRvZXNuJ3QgbmVlZCBs
b2NraW5nIGJlY2F1c2U6CisgICAgLy8gKDEpIG5vIG5ldyB0aHJlYWRzIGNhbiBiZSBhZGRlZCB0
byBtX3RocmVhZHMuIEhlbmNlLCBpdCBpcyBpbW11dGFibGUgYW5kIG5lZWRzIG5vIGxvY2tzLgor
ICAgIC8vICgyKSBKSVRXb3JrbGlzdFRocmVhZDo6bV9zYWZlcG9pbnQgaXMgcHJvdGVjdGVkIGJ5
IHRoYXQgdGhyZWFkJ3MgbV9yaWdodFRvUnVuIHdoaWNoIHdlIG11c3QgYmUKKyAgICAvLyAgICAg
aG9sZGluZyBoZXJlIGJlY2F1c2Ugb2YgYSBwcmlvciBjYWxsIHRvIHN1c3BlbmRBbGxUaHJlYWRz
KCkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICBTYWZlcG9pbnQqIHNhZmVwb2ludCA9IG1fdGhyZWFkc1tpXS0+bV9zYWZlcG9pbnQ7Cisg
ICAgICAgIGlmIChzYWZlcG9pbnQgJiYgc2FmZXBvaW50LT52bSgpID09IHZtKQorICAgICAgICAg
ICAgc2FmZXBvaW50LT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAg
ICB9CiB9Cit0ZW1wbGF0ZSB2b2lkIEpJVFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKEFi
c3RyYWN0U2xvdFZpc2l0b3ImKTsKK3RlbXBsYXRlIHZvaWQgSklUV29ya2xpc3Q6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIAotdm9pZCBKSVRXb3JrbGlzdDo6ZmluYWxpemVQ
bGFucyhQbGFucyYgbXlQbGFucykKK3ZvaWQgSklUV29ya2xpc3Q6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKLSAgICBmb3IgKFJlZlB0cjxQbGFuPiYgcGxhbiA6IG15UGxhbnMpIHsK
LSAgICAgICAgcGxhbi0+ZmluYWxpemUodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgKm1fbG9jayB9OwotICAgICAgICBtX3BsYW5uZWQucmVtb3ZlKHBsYW4tPmNvZGVC
bG9jaygpKTsKLSAgICB9CisgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKKyAgICBkdW1w
KGxvY2tlciwgb3V0KTsKIH0KIAotc3RhdGljIEpJVFdvcmtsaXN0KiB0aGVHbG9iYWxKSVRXb3Jr
bGlzdCB7IG51bGxwdHIgfTsKK3ZvaWQgSklUV29ya2xpc3Q6OmR1bXAoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
CisgICAgICAgICJKSVRXb3JrbGlzdCgiLCBSYXdQb2ludGVyKHRoaXMpLCAiKVtRdWV1ZSBMZW5n
dGggPSAiLCBxdWV1ZUxlbmd0aChsb2NrZXIpLAorICAgICAgICAiLCBNYXAgU2l6ZSA9ICIsIG1f
cGxhbnMuc2l6ZSgpLCAiLCBOdW0gUmVhZHkgPSAiLCBtX3JlYWR5UGxhbnMuc2l6ZSgpLAorICAg
ICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9mQWN0aXZlVGhyZWFkcywg
Ii8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOworfQogCi1KSVRXb3JrbGlzdCogSklUV29ya2xp
c3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKQordm9pZCBKSVRXb3JrbGlzdDo6cmVt
b3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiB2bSwgVmVjdG9yPFJlZlB0cjxKSVRQbGFuPiwgOD4m
IG15UmVhZHlQbGFucykKIHsKLSAgICByZXR1cm4gdGhlR2xvYmFsSklUV29ya2xpc3Q7CisgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgUmVmUHRyPEpJVFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CisgICAgICAg
IGlmIChwbGFuLT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAocGxhbi0+c3RhZ2UoKSAhPSBKSVRQbGFuU3RhZ2U6OlJlYWR5KQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxhbik7CisgICAgICAgIG1fcmVh
ZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKKyAgICAgICAgbV9yZWFkeVBsYW5z
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9wbGFucy5yZW1vdmUocGxhbi0+a2V5KCkpOworICAg
IH0KIH0KIAotSklUV29ya2xpc3QmIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgordm9pZCBKSVRXb3JrbGlzdDo6cmVt
b3ZlTWF0Y2hpbmdQbGFuc0ZvclZNKFZNJiB2bSwgY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hl
cykKIHsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKLSAgICBzdGQ6OmNhbGxfb25j
ZSgKLSAgICAgICAgb25jZSwKLSAgICAgICAgW10gewotICAgICAgICAgICAgYXV0byogd29ya2xp
c3QgPSBuZXcgSklUV29ya2xpc3QoKTsKLSAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7Ci0gICAgICAgICAgICB0aGVHbG9iYWxKSVRXb3JrbGlzdCA9IHdvcmtsaXN0OwotICAgICAg
ICB9KTsKLSAgICByZXR1cm4gKnRoZUdsb2JhbEpJVFdvcmtsaXN0OworICAgIExvY2tlciBsb2Nr
ZXIgeyAqbV9sb2NrIH07CisgICAgSGFzaFNldDxKSVRDb21waWxhdGlvbktleT4gZGVhZFBsYW5L
ZXlzOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CisgICAgICAgIEpJVFBsYW4q
IHBsYW4gPSBlbnRyeS52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZt
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghbWF0Y2hlcygqcGxhbikpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2Uo
KSAhPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKTsKKyAgICAgICAgZGVhZFBsYW5LZXlzLmFkZChw
bGFuLT5rZXkoKSk7CisgICAgfQorICAgIGZvciAoSklUQ29tcGlsYXRpb25LZXkga2V5IDogZGVh
ZFBsYW5LZXlzKQorICAgICAgICBtX3BsYW5zLnRha2Uoa2V5KS0+Y2FuY2VsKCk7CisgICAgZm9y
IChhdXRvJiBxdWV1ZSA6IG1fcXVldWVzKSB7CisgICAgICAgIERlcXVlPFJlZlB0cjxKSVRQbGFu
Pj4gbmV3UXVldWU7CisgICAgICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8SklUUGxhbj4gcGxhbiA9IHF1ZXVlLnRha2VGaXJzdCgpOworICAgICAgICAg
ICAgaWYgKHBsYW4tPnN0YWdlKCkgIT0gSklUUGxhblN0YWdlOjpDYW5jZWxlZCkKKyAgICAgICAg
ICAgICAgICBuZXdRdWV1ZS5hcHBlbmQocGxhbik7CisgICAgICAgIH0KKyAgICAgICAgcXVldWUu
c3dhcChuZXdRdWV1ZSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Jl
YWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcmVhZHlQbGFuc1tpXS0+c3Rh
Z2UoKSAhPSBKSVRQbGFuU3RhZ2U6OkNhbmNlbGVkKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKKyAgICAgICAg
bV9yZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCmluZGV4IGE3MmE4Mzg3MGEw
MDgyZmNkMzQ0OTUyOTBlYTUwZWExNDBkODlmMmYuLjljNmE5MDM4YzlkMDkzMDI2OGJiMTk4NzVi
NzJkM2QzNDAzMzczYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
V29ya2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjAsMTcgKzIwLDE3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNwcmFnbWEgb25jZQogCiAj
aWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKLSNpbmNsdWRlIDx3
dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVkZSAiSklUUGxhbi5oIgorI2luY2x1ZGUgIkpJ
VFdvcmtsaXN0VGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNDUsMzcgKzQ1LDg0IEBAIGNsYXNzIEpJVFdvcmtsaXN0IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShKSVRXb3JrbGlzdCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKLSAgICBjbGFzcyBQbGFuOwotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQbGFuPiwgMzI+
IFBsYW5zOwotICAgIAorICAgIGZyaWVuZCBjbGFzcyBKSVRXb3JrbGlzdFRocmVhZDsKKwogcHVi
bGljOgogICAgIH5KSVRXb3JrbGlzdCgpOwotICAgIAotICAgIGJvb2wgY29tcGxldGVBbGxGb3JW
TShWTSYpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnkgSklUIHdvcmsgaGFwcGVuZWQuCi0gICAgdm9p
ZCBwb2xsKFZNJik7Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7
Ci0gICAgCisKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7
CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7
Ci0gICAgCisKKyAgICBDb21waWxhdGlvblJlc3VsdCBlbnF1ZXVlKFJlZjxKSVRQbGFuPik7Cisg
ICAgc2l6ZV90IHF1ZXVlTGVuZ3RoKCkgY29uc3Q7CisKKyAgICB2b2lkIHN1c3BlbmRBbGxUaHJl
YWRzKCk7CisgICAgdm9pZCByZXN1bWVBbGxUaHJlYWRzKCk7CisKKyAgICBlbnVtIFN0YXRlIHsg
Tm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKKyAgICBTdGF0ZSBjb21waWxhdGlvblN0
YXRlKEpJVENvbXBpbGF0aW9uS2V5KTsKKworICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKFZNJiwgSklUQ29tcGlsYXRpb25LZXkgPSBKSVRDb21waWxhdGlvbktleSgpKTsKKwor
ICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CisKKyAgICAvLyBU
aGlzIGlzIGVxdWl2YWxlbnQgdG86CisgICAgLy8gd29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5z
Rm9yVk1BcmVSZWFkeSh2bSk7CisgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKHZtKTsKKyAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOworCisgICAg
dm9pZCBjYW5jZWxBbGxQbGFuc0ZvclZNKFZNJik7CisKKyAgICB2b2lkIHJlbW92ZURlYWRQbGFu
cyhWTSYpOworCisgICAgdW5zaWduZWQgc2V0TWF4aW11bU51bWJlck9mQ29uY3VycmVudERGR0Nv
bXBpbGF0aW9ucyh1bnNpZ25lZCk7CisgICAgdW5zaWduZWQgc2V0TWF4aW11bU51bWJlck9mQ29u
Y3VycmVudEZUTENvbXBpbGF0aW9ucyh1bnNpZ25lZCk7CisKKyAgICAvLyBPbmx5IGNhbGxlZCBv
biB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhWaXNp
dG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgorICAgIHZvaWQgaXRlcmF0
ZUNvZGVCbG9ja3NGb3JHQyhWaXNpdG9yJiwgVk0mLCBjb25zdCBGdW5jdGlvbjx2b2lkKENvZGVC
bG9jayopPiYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgSklUV29ya2xpc3QoKTsKLSAgICAKLSAgICBjbGFzcyBUaHJlYWQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIFRocmVhZDsKLSAgICAKLSAgICB2b2lkIGZpbmFsaXplUGxhbnMoUGxhbnMmKTsK
LSAgICAKLSAgICBQbGFucyBtX3F1ZXVlOwotICAgIFBsYW5zIG1fcGxhbnM7Ci0gICAgSGFzaFNl
dDxDb2RlQmxvY2sqPiBtX3BsYW5uZWQ7Ci0gICAgCisKKyAgICBzaXplX3QgcXVldWVMZW5ndGgo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1h
dGNoRnVuY3Rpb24+CisgICAgdm9pZCByZW1vdmVNYXRjaGluZ1BsYW5zRm9yVk0oVk0mLCBjb25z
dCBNYXRjaEZ1bmN0aW9uJik7CisKKyAgICB2b2lkIHJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShW
TSYsIFZlY3RvcjxSZWZQdHI8SklUUGxhbj4sIDg+Jik7CisKKyAgICB2b2lkIGR1bXAoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgbV9u
dW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fb25nb2luZ0NvbXBpbGF0
aW9uc1BlclRpZXIgeyAwLCAwLCAwIH07CisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihKSVRQbGFuOjpUaWVyOjpDb3VudCk+IG1fbWF4aW11bU51bWJlck9mQ29u
Y3VycmVudENvbXBpbGF0aW9uc1BlclRpZXI7CisKKyAgICBWZWN0b3I8UmVmUHRyPEpJVFdvcmts
aXN0VGhyZWFkPj4gbV90aHJlYWRzOworCisgICAgLy8gVXNlZCB0byBpbmZvcm0gdGhlIHRocmVh
ZCBhYm91dCB3aGF0IHdvcmsgdGhlcmUgaXMgbGVmdCB0byBkby4KKyAgICBzdGQ6OmFycmF5PERl
cXVlPFJlZlB0cjxKSVRQbGFuPj4sIHN0YXRpY19jYXN0PHNpemVfdD4oSklUUGxhbjo6VGllcjo6
Q291bnQpPiBtX3F1ZXVlczsKKworICAgIC8vIFVzZWQgdG8gYW5zd2VyIHF1ZXN0aW9ucyBhYm91
dCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvZGUgYmxvY2suIFRoaXMKKyAgICAvLyBpcyBwYXJ0
aWN1bGFybHkgZ3JlYXQgZm9yIHRoZSBjdGlfb3B0aW1pemUgT1NSIHNsb3cgcGF0aCwgd2hpY2gg
d2FudHMKKyAgICAvLyB0byBrbm93OiBkaWQgSSBnZXQgaGVyZSBiZWNhdXNlIGEgYmV0dGVyIHZl
cnNpb24gb2YgbWUganVzdCBnb3QKKyAgICAvLyBjb21waWxlZD8KKyAgICBIYXNoTWFwPEpJVENv
bXBpbGF0aW9uS2V5LCBSZWZQdHI8SklUUGxhbj4+IG1fcGxhbnM7CisKKyAgICAvLyBVc2VkIHRv
IHF1aWNrbHkgZmluZCB3aGljaCBwbGFucyBoYXZlIGJlZW4gY29tcGlsZWQgYW5kIGFyZSByZWFk
eSB0bworICAgIC8vIGJlIGNvbXBsZXRlZC4KKyAgICBWZWN0b3I8UmVmUHRyPEpJVFBsYW4+LCAx
Nj4gbV9yZWFkeVBsYW5zOworCisgICAgVW5jaGVja2VkTG9jayBtX3N1c3BlbnNpb25Mb2NrOwog
ICAgIEJveDxVbmNoZWNrZWRMb2NrPiBtX2xvY2s7Ci0gICAgUmVmPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV9jb25kaXRpb247IC8vIFdlIHVzZSBPbmUgVHJ1ZSBDb25kaXRpb24gZm9yIGV2
ZXJ5dGhpbmcgYmVjYXVzZSB0aGF0J3MgZWFzaWVyLgotICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWQ+IG1fdGhyZWFkOwotICAgIAotICAgIHVuc2lnbmVkIG1fbnVtQXZhaWxhYmxlVGhyZWFkcyB7
IDAgfTsKKworICAgIFJlZjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVucXVldWVk
OworICAgIFVuY2hlY2tlZENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RJbmxp
bmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDcyOGQ2MWIzMThmNzk0MGRjMmMzZjJiOGZmNzZiZmZkMmFkZmQ5
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3RJbmxpbmVzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSklUV29y
a2xpc3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBFTkFCTEUoSklUKQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKSVRXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NG
b3JHQyhWaXNpdG9yJiB2aXNpdG9yLCBWTSYgdm0sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ29kZUJs
b2NrKik+JiBmdW5jKQoreworICAgIExvY2tlciBsb2NrZXIgeyAqbV9sb2NrIH07CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fcGxhbnMpIHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT52bSgp
ICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBlbnRyeS52YWx1ZS0+aXRl
cmF0ZUNvZGVCbG9ja3NGb3JHQyh2aXNpdG9yLCBmdW5jKTsKKyAgICB9Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXb3JrbGlzdFRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdjODA3Nzg1MGYz
ODFlODNiNjE5ZWI5ZTg2ZjYwYzJkMTdjNDFhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFdvcmtsaXN0VGhyZWFkLmgiCisKKyNpZiBFTkFCTEUo
SklUKQorCisjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSklUV29ya2xpc3RUaHJlYWQ6OldvcmtTY29wZSBmaW5hbCB7
CitwdWJsaWM6CisgICAgV29ya1Njb3BlKEpJVFdvcmtsaXN0VGhyZWFkJiB0aHJlYWQpCisgICAg
ICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1fdGllcih0aHJlYWQubV9wbGFuLT50
aWVyKCkpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5tX3BsYW4pOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5tX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3Rp
dmVUaHJlYWRzKTsKKyAgICB9CisKKyAgICB+V29ya1Njb3BlKCkKKyAgICB7CisgICAgICAgIExv
Y2tlciBsb2NrZXIgeyAqbV90aHJlYWQubV93b3JrbGlzdC5tX2xvY2sgfTsKKyAgICAgICAgbV90
aHJlYWQubV9wbGFuID0gbnVsbHB0cjsKKyAgICAgICAgbV90aHJlYWQubV93b3JrbGlzdC5tX251
bWJlck9mQWN0aXZlVGhyZWFkcy0tOworICAgICAgICBtX3RocmVhZC5tX3dvcmtsaXN0Lm1fb25n
b2luZ0NvbXBpbGF0aW9uc1BlclRpZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGllcildLS07
CisgICAgfQorCitwcml2YXRlOgorICAgIEpJVFdvcmtsaXN0VGhyZWFkJiBtX3RocmVhZDsKKyAg
ICBKSVRQbGFuOjpUaWVyIG1fdGllcjsKK307CisKK0pJVFdvcmtsaXN0VGhyZWFkOjpKSVRXb3Jr
bGlzdFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBKSVRXb3JrbGlzdCYgd29y
a2xpc3QpCisgICAgOiBBdXRvbWF0aWNUaHJlYWQobG9ja2VyLCB3b3JrbGlzdC5tX2xvY2ssIHdv
cmtsaXN0Lm1fcGxhbkVucXVldWVkLmNvcHlSZWYoKSwgVGhyZWFkVHlwZTo6Q29tcGlsZXIpCisg
ICAgLCBtX3dvcmtsaXN0KHdvcmtsaXN0KQoreworfQorY29uc3QgY2hhciogSklUV29ya2xpc3RU
aHJlYWQ6Om5hbWUoKSBjb25zdAoreworI2lmIE9TKExJTlVYKQorICAgIHJldHVybiAiSklUV29y
a2VyIjsKKyNlbHNlCisgICAgcmV0dXJuICJKSVQgV29ya2xpc3QgSGVscGVyIFRocmVhZCI7Cisj
ZW5kaWYKK30KKworYXV0byBKSVRXb3JrbGlzdFRocmVhZDo6cG9sbChjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyKSAtPiBQb2xsUmVzdWx0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKSVRQbGFuOjpUaWVyOjpDb3VudCk7ICsraSkgewor
ICAgICAgICBhdXRvJiBxdWV1ZSA9IG1fd29ya2xpc3QubV9xdWV1ZXNbaV07CisgICAgICAgIGlm
IChxdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworCisgICAgICAgIGlm
IChtX3dvcmtsaXN0Lm1fb25nb2luZ0NvbXBpbGF0aW9uc1BlclRpZXJbaV0gPj0gbV93b3JrbGlz
dC5tX21heGltdW1OdW1iZXJPZkNvbmN1cnJlbnRDb21waWxhdGlvbnNQZXJUaWVyW2ldKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9wbGFuID0gcXVldWUudGFrZUZpcnN0KCk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9wbGFuKSkgeworICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3dvcmts
aXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgICAgIGRhdGFM
b2coIjogVGhyZWFkIHNodXR0aW5nIGRvd25cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX3BsYW4tPnN0YWdlKCkgPT0gSklUUGxhblN0YWdlOjpQcmVwYXJpbmcpOworICAg
ICAgICBtX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKys7CisgICAgICAgIG1fd29y
a2xpc3QubV9vbmdvaW5nQ29tcGlsYXRpb25zUGVyVGllcltpXSsrOworICAgICAgICByZXR1cm4g
UG9sbFJlc3VsdDo6V29yazsKKyAgICB9CisKKyAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsK
K30KKworYXV0byBKSVRXb3JrbGlzdFRocmVhZDo6d29yaygpIC0+IFdvcmtSZXN1bHQKK3sKKyAg
ICBXb3JrU2NvcGUgd29ya1Njb3BlKCp0aGlzKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBtX3Jp
Z2h0VG9SdW4gfTsKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyAqbV93b3JrbGlzdC5t
X2xvY2sgfTsKKyAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBKSVRQbGFuU3RhZ2U6OkNh
bmNlbGVkKQorICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAg
ICBtX3BsYW4tPm5vdGlmeUNvbXBpbGluZygpOworICAgIH0KKworCisgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogQ29tcGls
aW5nICIsIG1fcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHkiKTsKKworICAgIC8vIFRoZXJl
J3Mgbm8gd2F5IGZvciB0aGUgR0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biByaWdo
dFRvUnVuLgorICAgIGlmIChtX3BsYW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSkgewor
ICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUgd2UgYXJlISAoMSlcbiIp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBtX3Bs
YW4tPmNvbXBpbGVJblRocmVhZCh0aGlzKTsKKyAgICBpZiAobV9wbGFuLT5zdGFnZSgpICE9IEpJ
VFBsYW5TdGFnZTo6Q2FuY2VsZWQpIHsKKyAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53
b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQg
YnV0IGhlcmUgd2UgYXJlISAoMilcbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja2VyIGxv
Y2tlciB7ICptX3dvcmtsaXN0Lm1fbG9jayB9OworICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgp
ID09IEpJVFBsYW5TdGFnZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3Vs
dDo6Q29udGludWU7CisKKyAgICAgICAgbV9wbGFuLT5ub3RpZnlSZWFkeSgpOworCisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7CisgICAgICAgICAgICBt
X3dvcmtsaXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgZGF0
YUxvZygiOiBDb21waWxlZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsK
KyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtKCktPmhlYXAu
d29ybGRJc1N0b3BwZWQoKSk7CisgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBsYW5zLmFwcGVu
ZChXVEZNb3ZlKG1fcGxhbikpOworICAgICAgICBtX3dvcmtsaXN0Lm1fcGxhbkNvbXBpbGVkLm5v
dGlmeUFsbCgpOworICAgIH0KKworICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKK30K
Kwordm9pZCBKSVRXb3JrbGlzdFRocmVhZDo6dGhyZWFkRGlkU3RhcnQoKQoreworICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCksIG1fd29ya2xpc3QsICI6
IFRocmVhZCBzdGFydGVkIik7CisKK30KKwordm9pZCBKSVRXb3JrbGlzdFRocmVhZDo6dGhyZWFk
SXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSwgbV93b3JrbGlzdCwgIjogVGhyZWFkIHdp
bGwgc3RvcCIpOworICAgIEFTU0VSVCghbV9wbGFuKTsKKyAgICBtX3BsYW4gPSBudWxscHRyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFkLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDY1
ZTQ3MTAyNzk0NmVmODFmNmI2MGE3MDBiZWZhZDAzM2QxYmM5YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3RUaHJlYWQuaApAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUUGxhbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpJVFdvcmtsaXN0OworY2xhc3MgU2FmZXBvaW50OworCitjbGFzcyBKSVRXb3JrbGlzdFRocmVh
ZCBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgeworICAgIGNsYXNzIFdvcmtTY29wZTsK
KworICAgIGZyaWVuZCBjbGFzcyBTYWZlcG9pbnQ7CisgICAgZnJpZW5kIGNsYXNzIFdvcmtTY29w
ZTsKKyAgICBmcmllbmQgY2xhc3MgSklUV29ya2xpc3Q7CisKK3B1YmxpYzoKKyAgICBKSVRXb3Jr
bGlzdFRocmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYsIEpJVFdvcmtsaXN0Jik7CisKKyAgICBj
b25zdCBjaGFyKiBuYW1lKCkgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgUG9sbFJlc3Vs
dCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgZmluYWw7CisgICAgV29ya1Jlc3VsdCB3b3Jr
KCkgZmluYWw7CisKKyAgICB2b2lkIHRocmVhZERpZFN0YXJ0KCkgZmluYWw7CisKKyAgICB2b2lk
IHRocmVhZElzU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBmaW5hbDsKKworICAgIFVu
Y2hlY2tlZExvY2sgbV9yaWdodFRvUnVuOworICAgIEpJVFdvcmtsaXN0JiBtX3dvcmtsaXN0Owor
ICAgIFJlZlB0cjxKSVRQbGFuPiBtX3BsYW4geyBudWxscHRyIH07CisgICAgU2FmZXBvaW50KiBt
X3NhZmVwb2ludCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IGY3ZjNkZDE5YjM0ZWU0Yjc2MWVmMDNmN2NiMzdlYTdmNmQzMDEz
ODIuLmU0NDA1NTc0NjJlMDQ2YTJiNTA4NzBjNWYzZTk1NmYyMmQzM2RkYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkxMSW50U2xvd1BhdGhzLmgiCiAKICNpbmNsdWRlICJBcnJheUNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRQbGFuLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgpAQCAtMzc1LDIzICszNzYsMjEgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBK
SVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5wb2xsKHZtKTsKLSAgICAKLSAgICBz
d2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDogeworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xp
c3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0s
IEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGlu
ZSkpOworCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUIHx8IHdvcmtsaXN0U3RhdGUgPT0gSklUV29ya2xpc3Q6OkNvbXBpbGVkKSB7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5
IGNvbXBpbGVkLiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewot
ICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIo
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKKworICAgIGlmICh3b3JrbGlz
dFN0YXRlID09IEpJVFdvcmtsaXN0OjpOb3RLbm93bikgeworICAgICAgICBSZWY8QmFzZWxpbmVK
SVRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVFBsYW4oY29kZUJsb2NrLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CisgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVH
bG9iYWxXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CiAgICAgICAgIHJldHVybiBj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVDsKICAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50
OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA3MDc3YWUyOGVlMzY2YjA4ODFjZDk5
ZTM5NTdiMzM3OTMxZWIyYmEyLi5kOTQ5N2ViZDRmMGJhNmY2MjU3OWRjZDU0MjNhN2I5ODQ3ZTk0
NGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAg
LTI0Nyw2ICsyNDcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsK
ICAgICB2KFVuc2lnbmVkLCBtYXhERkdOb2Rlc0luQmFzaWNCbG9ja0ZvclByZWNpc2VBbmFseXNp
cywgMjAwMDAsIE5vcm1hbCwgIkRpc2FibGUgcHJlY2lzZSBidXQgY29zdGx5IGFuYWx5c2lzIGFu
ZCBnaXZlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGlmIHRoZSBudW1iZXIgb2YgREZHIG5vZGVzIGlu
IGEgYmxvY2sgZXhjZWVkcyB0aGlzIHRocmVzaG9sZCIpIFwKICAgICBcCiAgICAgdihCb29sLCB1
c2VDb25jdXJyZW50SklULCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIERGRyAvIEZUTCBjb21w
aWxhdGlvbiBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIGV4ZWN1dGluZyBKUyB0aHJlYWQiKSBc
CisgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZXb3JrbGlzdFRocmVhZHMsIGNvbXB1dGVOdW1iZXJP
ZldvcmtlclRocmVhZHMoMywgMiksIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQs
IG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRz
KDMsIDIpIC0gMSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZG
VExDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoTUFYSU1VTV9O
VU1CRVJfT0ZfRlRMX0NPTVBJTEVSX1RIUkVBRFMsIDIpIC0gMSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihJbnQzMiwgcHJpb3JpdHlEZWx0YU9mREZHQ29tcGlsZXJUaHJlYWRzLCBjb21wdXRl
UHJpb3JpdHlEZWx0YU9mV29ya2VyVGhyZWFkcygtMSwgMCksIE5vcm1hbCwgbnVsbHB0cikgXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDg2MDgyYjJiZTdjYmE0YjUyNmFh
OTdhOWQzOTRiNTlkNjg0MWU4NDkuLjYwZjk4ZjU2M2E3NmVkZWRhNTJhMDcyODgzZTRiYWZlYmQ3
MmRlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTQzLDcgKzQzLDYg
QEAKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNvbnRyb2xGbG93
UHJvZmlsZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJE
RkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRPTUF0dHJpYnV0ZUdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKQEAgLTYx
MywyMCArNjEyLDggQEAgVk06On5WTSgpCiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
SklUV29ya2xpc3QqIHdvcmtsaXN0ID0gSklUV29ya2xpc3Q6OmV4aXN0aW5nR2xvYmFsV29ya2xp
c3RPck51bGwoKSkKLSAgICAgICAgd29ya2xpc3QtPmNvbXBsZXRlQWxsRm9yVk0oKnRoaXMpOwor
ICAgICAgICB3b3JrbGlzdC0+Y2FuY2VsQWxsUGxhbnNGb3JWTSgqdGhpcyk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIE1ha2Ugc3VyZSBjb25j
dXJyZW50IGNvbXBpbGF0aW9ucyBhcmUgZG9uZSwgYnV0IGRvbid0IGluc3RhbGwgdGhlbSwgc2lu
Y2UgdGhlcmUgaXMKLSAgICAvLyBubyBwb2ludCB0byBkb2luZyBzby4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKERG
Rzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51
bGwoaSkpIHsKLSAgICAgICAgICAgIHdvcmtsaXN0LT5yZW1vdmVOb25Db21waWxpbmdQbGFuc0Zv
clZNKCp0aGlzKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LT53YWl0VW50aWxBbGxQbGFuc0ZvclZN
QXJlUmVhZHkoKnRoaXMpOwotICAgICAgICAgICAgd29ya2xpc3QtPnJlbW92ZUFsbFJlYWR5UGxh
bnNGb3JWTSgqdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAgICAgCiAgICAgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCk7CiAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>